【问题标题】:SQL to remove partial text from valueSQL从值中删除部分文本
【发布时间】:2013-01-09 18:34:49
【问题描述】:

如果存在,我将如何编写 SQL 以从记录值中删除一些文本。

Version Column data
 ------------------  
WEB 1.0.1  
WEB 1.0.1  
1.0.2  
1.0.2  

我想更新所有包含“WEB”的记录并删除该文本,但保留其余的“1.0.1”。

到目前为止,我有Select * from table

数据库是 MySQL 5.5.25

【问题讨论】:

  • 您使用的是什么 RDMBS?
  • 你可以看看你的 RDMBS 的字符串函数吗?
  • @Kostia,不欢迎 RTFM cmets。 @1.21 吉瓦 - 您可能也有兴趣使用 REPLACE 更新记录,如下所示:stackoverflow.com/questions/1876762/…

标签: mysql sql


【解决方案1】:

在 postgres 中是:

select substring(Version from 5 for 3) 
from table
where Version like '%WEB%'

【讨论】:

  • postgres 存在相同的函数
【解决方案2】:

MySQLSQL ServerPostGresREPLACE 功能将删除所有出现的 WEB 并带有空白。

选择

SELECT REPLACE(Version, 'WEB ', '') FROM MyTable

更新

UPDATE MyTable SET Version = REPLACE(Version, 'WEB ', '') 

UPDATE MyTable SET Version = REPLACE(Version, 'WEB ', '') WHERE Version LIKE '%WEB %'

参考

  • REPLACE - SQL 服务器
  • REPLACE - MySQL
  • REPLACE - PostGres
  • 我在答案中包含了多个数据库服务器,并且由于对问题进行了多次编辑而选择和更新了

【讨论】:

  • 好的。我创建了一行,字段中的值为“TEST 1.0.1”。我用 REPLACE(version, 'TEST ', '') 进行了测试,它说它影响了 9000 行,但它似乎没有改变任何东西。 (刷新表格)
  • 你的问题是关于SELECTING rows,如果你想UPDATE rows,那就不同了。我将编辑我的答案以显示差异。
【解决方案3】:
UPDATE Table
SET Version = Replace(Version, 'Web ','')
WHERE Version LIKE 'WEB %'

【讨论】:

    【解决方案4】:

    这是另一个应该在任何 SQL 中工作的示例,因为使用的函数是 ANSI SQL 标准。此示例假定单词“WEB”和第一个数字之间有一个空格。但它可以改进。我认为这是比硬编码 subtr 的开始和结束位置更通用的方法:

    SELECT TRIM(SUBSTR('WEB 1.0.1', INSTR('WEB 1.0.1', ' ') ) ) as version 
      FROM dual;
    
     SQL> 
    
     VERSION
     -------
     1.0.1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      相关资源
      最近更新 更多