MySQL 在 where 子句中使用带有子索引的严格模式

标签 mysql sql strict

在严格模式下使用 MYSQL 5.5,我得到:

Error Code: 1292
Truncated incorrect DOUBLE value: 'C'

使用下面的 SQL:

INSERT INTO table.t2 SELECT Something FROM table.t3 
WHERE SUBSTRING_INDEX(Something,":",-1) NOT IN ("C","E") 

“Something”列中的数据可能如下所示:

2131:2134
2132:2134:C
2133:2134:C
2134:2134:E
2135:2134:E
2136:2134
2137:2134
2138:2134
2139:2134

我知道我可以删除严格模式,但想解决这个问题。这是我第一次 在尝试解决此问题时使用“cast”...-1,给出整数或字符串

最佳答案

where 子句存在问题。表达式'C' 或'E' 是一个 bool 表达式,被视为整数。因此,将值转换为数字时会出现错误。

尝试使用 not in 代替:

WHERE SUBSTRING_INDEX(Something, ':', -1) NOT IN ('C', 'E') 

关于MySQL 在 where 子句中使用带有子索引的严格模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29054318/

相关文章:

php - 将一个表主 IDS 列表存储在另一个表中的最简单方法?

php - 如何更快地将csv文件上传到mysql数据库

sql - mysql递归?

c++ - 有没有人考虑过更多 "strict"风格的 C++,其中默认/需要初始化变量?

PHP PDO 查询执行不保存传递的数据

php - Fetch Assoc - 每个 ID 将数据添加到数组一次

java - 将行添加到现有 Java 表结果

MySQL 在结果集中添加缺失的月份

javascript - JavaScript的严格模式是如何实现的

php - 更改每个 session 的 MySQL 模式