【问题标题】:Delete part of a string in SQL在 SQL 中删除字符串的一部分
【发布时间】:2012-12-01 11:25:22
【问题描述】:

我有一个包含此类条目的字段的表格:

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

我要删" - Cap. (Number)"

正如您所见,在某些情况下没有 "Cap.",而在其他情况下,该号码的位数超过 1。

我尝试使用REPLACE()TRIM(),但REPLACE() 仅适用于" - cap.",但不适用于数字;和TRIM() 剪切特定数量的字符。

另外,我想我需要WHERE field LIKE '% - CAP.%' 之类的东西来验证我正在更改正确的字段,因为并非所有字段都需要更改。

有什么建议吗?

【问题讨论】:

  • 只是文本..“世界杯 - 第 205 章”
  • “Cap nnn”总是在文本的末尾吗?
  • 在某些情况下是的。在其他人没有“ - 帽号”..
  • 顺便说一句,检查数字可以是1位2或3

标签: mysql sql trim cut


【解决方案1】:
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 上查看。

【讨论】:

  • 太棒了!现在您能否验证这是否是更新字段的正确方法? ======== UPDATE rollooriginal SET CASE WHEN RO_Titulo RLIKE ' - Cap\\. [[:digit:]]+$' THEN LEFT( RO_Titulo, 1 + LENGTH(RO_Titulo) - LENGTH(' - Cap. ') - LOCATE(REVERSE(' - Cap. '), REVERSE(RO_Titulo)) ) ELSE RO_Titulo END WHERE RO_Titulo LIKE '%Cap. %'; ========
  • 你快到了:UPDATE rollooriginal SET RO_Titulo = LEFT(RO_Titulo, 1 + CHAR_LENGTH(RO_Titulo) - CHAR_LENGTH(' - Cap. ') - LOCATE(REVERSE(' - Cap. '), REVERSE(RO_Titulo))) WHERE RO_Titulo RLIKE ' - Cap\\. [[:digit:]]{1,3}$'; 应该这样做。
【解决方案2】:
SELECT SUBSTRING_INDEX(column_name, 'Cap', 1) FROM table ; // for left
SELECT SUBSTRING_INDEX(column_name, 'Cap', -1) FROM table; // for right

【讨论】:

  • 问题被标记为mysql
  • 如果text 包含'Cap' 怎么办?此外,如果 Cap 不存在(如第一个示例),leftright 都会返回完整的字符串。
  • #1548 - 无法从 mysql.proc 加载。该表可能已损坏
猜你喜欢
  • 1970-01-01
  • 2012-03-31
  • 2022-12-11
  • 2017-05-11
  • 2018-12-07
  • 1970-01-01
相关资源
最近更新 更多