首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何替换SQL匹配的()?

如何替换SQL匹配的()?
EN

Stack Overflow用户
提问于 2019-03-13 20:10:10
回答 2查看 45关注 0票数 0

MySQL在替换语句中将Must backout Treasury匹配为52个不同的值。我不明白这怎么可能。那么,MySQL如何匹配对象呢?

我做了一次从UKUK的替换,并打印了不同的国家。它起了作用,但我注意到Must backout Treasury作为一个国家的错误。我去用NULL替换它,但是MySQL用NULL替换了所有的国家值。

代码语言:javascript
复制
| 19 | 15:22:27 | UPDATE Trade SET country = REPLACE(country, "UK", "United Kingdom")
| 360 row(s) affected Rows matched: 23027  Changed: 360  Warnings: 0   

我把事情放回原处

代码语言:javascript
复制
| 20 | 15:22:39 | SET SQL_SAFE_UPDATES = 1 

查看已更改的内容;注意52个值

代码语言:javascript
复制
| 21 | 15:22:51 | SELECT DISTINCT(Country) FROM Trade
| 52 row(s) returned  

并试图替换那个1坏值

代码语言:javascript
复制
| 22 | 15:23:48 | SET SQL_SAFE_UPDATES = 0  
| 23 | 15:23:48 | UPDATE Trade SET country = REPLACE(country, "Must backout Treasury", NULL)
| 9773 row(s) affected Rows matched: 23027  Changed: 9773  Warnings: 0 |

编辑:好的,在玩完之后,我可以确认,无论何时您尝试REPLACE(Field, item, NULL),它都会完全忽略搜索和匹配,并且会在字段中的每个值中丢弃NULL

所以,问题仍然存在,有人知道为什么会发生这种事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-13 21:25:28

在MySQL中,大多数涉及NULL值的字符串操作最终都会计算到NULL。从NULL的角度来看,这种行为是有意义的,因为它代表了“我不知道这有什么价值”。

考虑:

代码语言:javascript
复制
 SELECT CONCAT('abc',NULL)

返回NULL。如果我在'abc‘中附加一个“未知”值,结果将是“未知”。类似地,

代码语言:javascript
复制
 SELECT REPLACE('abc','d',NULL)

将“未知”值放入字符串将导致“未知”值。所以这个表达式返回NULL'd'是否出现在'abc'中并不重要。

通常,我们在SELECT语句中测试表达式,然后将它们合并到UPDATE语句中。这使我们可以确认正在匹配的行,以及表达式的结果。

代码语言:javascript
复制
 SELECT t.country 
      , REPLACE(t.country, 'Must backout Treasury', NULL) AS country_repl_null
      , REPLACE(t.country, 'Must backout Treasury', '')   AS country_repl_empty
   FROM trade t
  ORDER 
     BY ...
票数 0
EN

Stack Overflow用户

发布于 2019-03-13 20:18:22

因为REPLACE()将输入字符串与值匹配。它检查输入字符串是否是字段值的子字符串,如果是,它将用您的值替换它。因此,当您试图用UK替换United Kingdom时,它会搜索数据中出现的所有UK,并将它们全部替换。

而不是替换,只需使用WHERE指定故障记录并执行替换。

UPDATE Trade SET country=NULL WHERE country="Must backout Treasury" UPDATE Trade SET country=NULL WHERE country LIKE "%Must backout Treasury%"

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55150424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档