mysql - 在 SQL Server 中使用 LIKE 和通配符获取月份或日期会出错

标签 mysql sql popsql

我试图使用以下查询从表 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,

我得到的错误快照:

Here is the image link

这里到底出了什么问题?我记得以前我用过这个并且它工作正常但现在(可能是由于新的更新)它不工作了。甚至似乎不是因为 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/

相关文章:

SQL 代码未运行,收到 "permission denied for schema public"错误消息

mysql - 从包含类别和子类别的表中进行选择的 SQL 查询

mysql - 将默认值更改为mysql中的子查询

mysql - 在mysql中选择两个用户通信之间的最新消息

mysql - 从子查询 SQL 选择最大数据,但它显示子查询的所有结果

mysql - 无法远程连接到 MySQL DB

php - 从最大数量的项目中将数组存储在 Mysql 数据库中

mysql - 从多个类别进行查询

mysql - 用户在mysql组中的最后n个事务