0

以下を使用して、列から最初の 40 文字のみを選択しています

SELECT SUBSTRING(w.item_title,1,40) as title from tableName blah blah

私が本当にやりたいことは次のとおりです。

が 40 文字を超える場合w.item_titleは、最初の 40 文字のみを返し、追加で ...でなければw.item_titleそのまま返す

これは段階的に可能でSELECTあり、そこで行うべきですか? それとも事後に処理する必要がありますか?

JSを使用して結果を表示しています。

4

4 に答える 4

1
SELECT SUBSTR(INSERT(w.item_title, 41, 3, '...'), 1, 43)
  FROM ...

例については、 INSERT()文字列関数のマニュアルを参照してください。

INSERT(str、pos、len、newstr)
文字列strを返します。部分文字列は位置posで始まり、len文字は長い間文字列newstrに置き換えられます。posが文字列の長さの範囲内にない場合は、元の文字列を返します。lenが文字列の残りの部分の長さの範囲内にない場合、位置posから文字列の残りの部分を置き換えます。いずれかの引数がNULLの場合、NULLを返します。

EDIT
の最後のパラメータは、Joachimが指摘したとおりにするSUBSTR必要があります。43

于 2013-01-13T10:37:30.077 に答える
0

で試すこともできますLeft

SELECT CONCAT(Left(w.item_title,40),
              IF(LENGTH(w.item_title)>40, 'something', '')) as title 
FROM tableName w
;

別:

SELECT case when Length(w.item_title) > 40 then 
       Left(w.item_title,40) else
       CONCAT(coalesce(w.item_title,''), 'something') End as title 
FROM tableName w
;
于 2013-01-13T10:37:06.557 に答える
0

クエリ:

SELECT CASE WHEN LENGTH(w.item_title)>40
            THEN SUBSTRING(w.item_title,1,40)
            ELSE w.item_title END as title 
from tableName w
于 2013-01-13T10:24:23.157 に答える
0

「IF」を使用して接尾辞を追加できます。

SELECT CONCAT(SUBSTRING(w.item_title,1,40),
              IF(LENGTH(w.item_title)>40, '...', '')) as title 
FROM tableName w

SQLfiddle のデモはこちら

データベースで実行する必要があるかどうかについては、常に「場合による」と答えることができる、よりトリッキーな質問です。

テキストが長い場合 (記事など)、最初の 40 文字だけが必要な場合は記事全体を転送したくないことは明らかですが、テキストが短い場合は、計算をオフロードすることをお勧めします。データベース。Web サーバーを追加するのは簡単ですが、データベースをスケールアップするには費用がかかります。

于 2013-01-13T10:26:25.633 に答える