2013-04-09 2 views
3

보고 목적으로 아래 문으로 50 자까지자를 필드가 있습니다. 단어가 차단되지 않도록SUBSTRING 및 CHARINDEX를 사용하여 필드에 마지막으로 완전한 단어를 가져옵니다

SELECT (CASE WHEN (LEN(Notes) > 50) THEN SUBSTRING(Notes, 0, 50) + '...' WHEN (LEN(Notes) < 50) THEN SUBSTRING(Notes, 0, LEN(Notes)) + '...' ELSE 'NO NOTES WERE ENTERED' END) AS Notes FROM MyTable 

이것은, 그러나, 나는 메모 필드의 마지막 단어를 완료하는 데 큰 싶은 작품 그래서 나는, CHARINDEX, SUBSTRING을 사용 REVERSE과 가능성 RIGHT 기능 싶습니다 대략 50 자 길이의 문자열의 일부인 마지막 완전한 단어를 반환합니다.

나는 실험을했으며 많은 행운이 없다.

도움을 주시면 감사하겠습니다. 메모 컬럼의 길이가 50 이상이면

답변

3

해당 위치로 위치 50 SUBSTRING 후 다음 공간을 찾기 위해 CHARINDEX를 사용할 수 있습니다. 다음은 SQL Fiddle입니다. 당신이 문자 제한을 초과하지 않으려는 경우

SELECT RTRIM(
    CASE 
     -- when the length is less than 50, or the character at position 50 is part of the last word, return the entire string 
     WHEN LEN(notes) < 50 OR (SUBSTRING(notes,50,1) <> ' ' AND CHARINDEX(' ',notes,50) = 0) 
      THEN notes 
     -- when the character at position 50 is a space, return the first 50 characters of the string 
     WHEN SUBSTRING(notes,50,1) = ' ' 
      THEN LEFT(notes, 50) 
     -- when the character at position 50 is a word, cut off the string at the next space after 50 
     WHEN SUBSTRING(notes,50,1) <> ' ' 
      THEN LEFT(notes,CHARINDEX(' ',notes,50)) 
    END) AS first_50 
FROM tbl_notes 
+0

이했다. 정말 고마워! – user2146538

+0

당신은 또한 그의 대답을 정확하다고 표시하면 좋을 것이므로, 그의 대답을 올리면서 약간의 점수를 얻게 될 것입니다. – BerggreenDK

0

이처럼 수 : 예상대로

DECLARE @Table TABLE 
(
    String nvarchar(100) 
) 

DECLARE 
    @Size int    = 25 

INSERT @Table SELECT 'Lorem ipsum dolor sit ame' 
INSERT @Table SELECT 'Lorem ipsum dolor sit ame tas' 
INSERT @Table SELECT 'Lorem ipsum dolor sit am asd' 
INSERT @Table SELECT 'Lorem ipsum dolor sita am' 
INSERT @Table SELECT 'Lorem ipsum dolor sita a amet, consectetur adipiscing elit,' 
INSERT @Table SELECT 'Lorem ipsum dolor sita' 
INSERT @Table SELECT 'Lorem ipsum dolor sita asamet, consectetur adipiscing elit,' 

SELECT 
    LEN(R.LimitTruncation) AS LimitTruncationLen, 
    R.LimitTruncation, 
    LEN(String) AS StringLen, 
    R.String 
FROM 
(
    SELECT 
    String, 
    --This is the main part 
    CASE 
     WHEN LEN(String) <= @Size THEN String 
     WHEN CHARINDEX(' ', String, @Size) = @Size OR CHARINDEX(' ', String, @Size) = @Size + 1 THEN RTRIM(LEFT(String, @Size)) 
     ELSE REVERSE(SUBSTRING(REVERSE(LEFT(String, @Size)), CHARINDEX(' ', REVERSE(LEFT(String, @Size))), @Size)) 
    END AS LimitTruncation 
    FROM 
    @Table 
) R 
관련 문제