1

我试图使用以下查询从表客户中查找 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;
4

2 回答 2

2

不要对日期数据类型使用字符串函数。时期。混合数据类型只会导致 SQL 出现问题。使用likeon adate需要将日期转换为字符串,具体格式取决于服务器的位置和设置。

如果您的出生数据是一个字符串,请修复它:

alter table modify column date_of_birth date;

那么正确的方法是使用您出于某种未知原因特别不想使用的语法:

where month(date_of_birth) = 12

如果date_of_birth存储为字符串并且由于某种原因无法使用本机格式存储,那么您依赖于字符串的未指定格式。大概,你想要这样的东西:

where date_of_birth like '%-12-%'  -- assuming date_of_birth is a string

假设月份在日期字符串的中间,被连字符包围,并且日期在开始或结束。

于 2019-07-06T15:29:56.463 回答
0

尝试 where month(date_or_birth)=12 我还没有尝试..但是 sql 中有月份函数

于 2019-07-06T15:28:44.093 回答