2

この種のエントリを持つフィールドを持つテーブルがあります。

"text text text"
"text text - Cap. 125"
"text - Cap. 1"

私はカットする必要があり" - Cap. (Number)"ます。

ご覧のとおり、数字がない場合も"Cap."あれば、数字が 1 桁以上の場合もあります。

REPLACE()andを使用しようとしましたTRIM()が、数値に対してREPLACE()のみ機能し" - cap."ますが、数値に対しては機能しません。特定の数の文字をTRIM()カットします。

WHERE field LIKE '% - CAP.%'また、すべてのフィールドを変更する必要があるわけではないため、正しいフィールドを変更していることを確認するようなものが必要だと思います。

助言がありますか?

4

2 に答える 2

3
SELECT CASE
         WHEN myField RLIKE ' - Cap\\. [[:digit:]]{1,3}$' THEN
           LEFT(myField, 1
             + CHAR_LENGTH(myField)
             - CHAR_LENGTH(' - Cap. ')
             - LOCATE(REVERSE(' - Cap. '), REVERSE(myField))
           )
         ELSE myField
       END
FROM   myTable

sqlfiddleで参照してください。

于 2012-12-01T11:43:24.003 に答える
0
SELECT SUBSTRING_INDEX(column_name, 'Cap', 1) FROM table ; // for left
SELECT SUBSTRING_INDEX(column_name, 'Cap', -1) FROM table; // for right
于 2012-12-01T11:31:34.567 に答える