3

データベースにフィールドがあり、レポートの目的で、以下のステートメントで 50 文字に切り詰める予定です。

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 文字の文字列の一部です。

私は実験しましたが、あまり運がありません。

どんな助けでも大歓迎です。

4

2 に答える 2

3

注記列の長さが 50 を超える場合、 を使用CHARINDEXして、位置 50 の後の次のスペースとSUBSTRINGその位置を見つけることができます。ここに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
于 2013-04-09T19:27:51.963 に答える