Mysql 批量update 过滤条件为datetime类型like的模糊搜索,发生Err 1292

本文讨论了在MySQL中使用LIKE操作符进行datetime类型字段模糊搜索时遇到的错误1292问题。错误出现在尝试使用'%2021-04-20%'格式的字符串进行匹配。正确的做法是使用BETWEEN运算符,如`create_time BETWEEN '2021-04-20 00:00:00' AND '2021-04-20 23:59:59'`,这将确保查询在指定日期内的所有记录。理解并正确使用数据库查询条件对于优化数据库操作至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mysql 批量update 过滤条件为datetime类型like的模糊搜索,发生Err 1292

发生err 1292 的语句

update person_status set data_status = '1', status_now = '1' 
where create_time like '%2021-04-20%';

成功的语句

update person_status set data_status = '1', status_now = '1' 
create_time between '2021-04-20 00:00:00' and '2021-04-20 23:59:59'
### 如何在 MySQL 中对 `DATETIME` 类型数据执行模糊查询 对于 `DATETIME` 类型字段,在 MySQL 数据库中实现模糊匹配通常涉及使用日期时间函数以及 SQL 的比较运算符来构建灵活的查询条件。 #### 使用 BETWEEN 和 DATE_FORMAT 函数 为了更精确地控制查询范围,可以采用 `BETWEEN` 关键字配合 `DATE_FORMAT()` 来格式化目标列中的值以便于对比。例如: ```sql SELECT * FROM table_name WHERE DATE_FORMAT(datetime_column, '%Y-%m-%d') BETWEEN 'start_date' AND 'end_date'; ``` 此方法允许指定一个时间段内的记录被检索出来[^1]。 #### 利用 LIKE 进行部分模式匹配 尽管不常见,但如果确实需要基于字符串形式的部分匹配,则可转换成字符后再应用 `LIKE` 操作符: ```sql SELECT * FROM table_name WHERE datetime_column LIKE '2023-07%'; -- 查找特定月份内所有条目 ``` 需要注意的是这种方式效率较低,并可能影响性能,因为索引无法有效利用[^2]。 #### 结合 STR_TO_DATE 解析外部输入 当面对来自用户的自由文本输入作为过滤依据时,先通过 `STR_TO_DATE()` 将其转化为标准的时间戳再做进一步处理会更加安全可靠: ```sql SELECT * FROM table_name WHERE datetime_column >= STR_TO_DATE('input_string', '%Y-%m-%d %H:%i') AND datetime_column < STR_TO_DATE('input_string', '%Y-%m-%d %H:%i') + INTERVAL 1 DAY; ``` 这种方法确保了即使用户提供了非严格格式化的日期也能正确解析并应用于查询逻辑之中[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值