MySQL多条件更新当前时间报错,求语法排查与解决方法
解决MariaDB中SQL语法报错的问题
嘿,这个问题其实很常见——你用了SQL Server专属的函数GetDate(),但MariaDB(和MySQL)并不支持这个函数,这就是导致语法报错的直接原因。咱们一步步来修正:
核心问题点
GetDate()是SQL Server用来获取当前时间的函数,MariaDB里对应的替代函数是:
NOW():返回当前完整的日期+时间(格式如YYYY-MM-DD HH:MM:SS),和SQL Server的GetDate()功能一致CURDATE():仅返回当前日期(格式YYYY-MM-DD),适合匹配纯日期类型的字段
修正后的SQL语句
首先可以把你的嵌套子查询简化(原语句的NIP IN(...)完全没必要嵌套),同时替换正确的时间函数:
UPDATE Presensi SET jam_pulang = NOW() WHERE faceid = 101 AND Tanggal = CURDATE();
特殊情况处理
如果你的Tanggal字段存储的是datetime类型(不是纯日期),需要提取日期部分来匹配:
UPDATE Presensi SET jam_pulang = NOW() WHERE faceid = 101 AND DATE(Tanggal) = CURDATE();
为什么这样改?
- 替换
GetDate()为NOW():让MariaDB能识别当前时间函数 - 用
CURDATE()替代Convert(date, GetDate()):MariaDB中直接用CURDATE()就能获取当前日期,无需额外转换 - 简化WHERE条件:原语句的子查询
SELECT nip from presensi where faceid=101完全可以直接写成faceid = 101,既减少不必要的嵌套,又提升执行效率
内容的提问来源于stack exchange,提问作者Aulia Mei Azizi
相关产品推荐
相关产品推荐

