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 回答