mysql - SQL 的 Replace() 如何匹配?

标签 mysql

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

我从英国替换为英国,并打印了不同的国家/地区。它有效,但我注意到一个错误Must backout Treasury as a Country。我将其替换为 NULL,结果却让 MySQL 将所有国家/地区值替换为 NULL

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

我把事情放回去了

| 20 | 15:22:39 | SET SQL_SAFE_UPDATES = 1 

查看发生了什么变化;注意 52 个值

| 21 | 15:22:51 | SELECT DISTINCT(Country) FROM Trade
| 52 row(s) returned  

并尝试替换 1 个错误值

| 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 删除字段中的每个值。

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

最佳答案

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

无需替换,只需使用 WHERE 指定故障记录并进行替换即可。

更新交易集国家=NULL WHERE国家=“必须撤回国库” 更新交易设置国家/地区=NULL,其中国家/地区如“%必须撤回国库%”

关于mysql - SQL 的 Replace() 如何匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55150424/

相关文章:

mysql - NodeJs 将多个请求的 Json 存储到 MySQL DB

mySQL 创建一个 View ,其中包含 3 个表中 2 个表的所有行组合?

mysql查询失败,但没有清理磁盘空间

javascript - OUT 在命令行中总是为空,但在 SQL 客户端中却不是?

php - 带有查询生成器的 Laravel 嵌套连接查询

mysql - 左连接,每个左条目只有 1 行

php - fatal error :调用未定义的方法 PDO::error()

mysql - 使用列名进行表数据转储

php - 如何将时间戳声明为变量并转换为 ddmmyy 格式

java - 在主 Activity 上无法在 Android 中显示弹出窗口 Android 无法在未调用 Looper.prepare() 的线程内创建处理程序