我试图使用以下查询从表 customers 中查找出生于 12 月的客户:
SELECT *
FROM customers
WHERE date_of_birth LIKE '____-12-%' ;
但它会抛出一个错误:ER_WRONG_VALUE: Incorrect DATE value: '____-12-%'
date_of_birth 值的类型是 DATE,它在表中定义为 date_of_birth DATE,
我得到的错误快照:
这里到底出了什么问题?我记得以前我用过这个并且它工作正常但现在(可能是由于新的更新)它不工作了。甚至似乎不是因为 MySQL 严格模式。我不知道到底是什么导致了问题。
另外,请不要向我推荐替代方案,我已经有了类似使用 MONTH() 的替代方案:
SELECT *
FROM customers
WHERE MONTH(date_of_birth) = 12;
最佳答案
不要对日期数据类型使用字符串函数。时期。混合数据类型只会导致 SQL 出现问题。在 date
上使用 like
需要将日期转换为字符串,具体格式取决于服务器的位置和设置。
如果你的出生数据是一个字符串,修复它:
alter table modify column date_of_birth date;
那么正确的方法是使用您出于某种未知原因特别不想使用的语法:
where month(date_of_birth) = 12
如果 date_of_birth
存储为字符串并且由于某种原因不能使用 native 格式存储,那么您依赖于未指定的字符串格式。据推测,您想要这样的东西:
where date_of_birth like '%-12-%' -- assuming date_of_birth is a string
假设月份在日期字符串的中间,由连字符包围,日期在开头或结尾。
关于mysql - 在 SQL Server 中使用 LIKE 和通配符获取月份或日期会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56915403/