如何将sql数据库的dateandtime字段与当前日期(其中dateandtime为2019年6月6日上午11:19)进行比较此格式在MYSQL中
我想将数据库的日期与当前日期进行比较,但无法进行比较。已经尝试了如何将sql数据库的dateandtime字段与当前日期(其中dateandtime为2019年6月6日上午11:19)进行比较此格式在MYSQL中,mysql,sql,date,mysql-workbench,Mysql,Sql,Date,Mysql Workbench,我想将数据库的日期与当前日期进行比较,但无法进行比较。已经尝试了DATE\u格式,从UNIXTIME,日期,STR\u到日期,但没有任何效果。它们只返回NULL DateAndTime列中的“2019年6月12日03:24PM”此格式和类型为VARCHAR SELECT User, DATE_FORMAT(DateAndTime,'%d-%m-%Y') AS AddDate FROM CallList 您可以使用以下命令获取值: 因此,以下查询应该可以工作: SELECT `User`
DATE\u格式
,从UNIXTIME
,日期
,STR\u到日期
,但没有任何效果。它们只返回NULL
DateAndTime
列中的“2019年6月12日03:24PM”此格式和类型为VARCHAR
SELECT User,
DATE_FORMAT(DateAndTime,'%d-%m-%Y') AS AddDate
FROM CallList
您可以使用以下命令获取值: 因此,以下查询应该可以工作:
SELECT `User`,
STR_TO_DATE(`DateAndTime`, '%M %d, %Y at %h:%i%p') AS `AddDate`
FROM `CallList`
我建议将
DateAndTime
列替换为realDATETIME
列,而不是将DATETIME值存储为字符串。是否正在查找str\u to\u date()
重要提示:切勿将日期存储为字符串。这在很多方面都是有害的:它效率低下,并且会给所有查询(您正开始看到)增加无用的复杂性。我强烈建议您修复数据模型,将日期存储在相关的date
数据类型中
以下是迁移过程的框架:
-- create a new column and populate it
alter table CallList add DateAndTime2 datetime;
update CallList set DateAndTime2 = str_to_date(DateAndTime, '%M %d, %Y at %I:%i%p');
-- drop the old column and rename the new colum
alter table CallList drop column DateAndTime;
alter table CallList change DateAndTime2 DateAndTime datetime;
您的列的数据类型是什么?它的varchar@JensWhy您将此列声明为
varchar
?此列的类型应为DATETIME
,并且在原始位置,您可以从该字符串创建一个DATETIME
,然后插入到数据库中。将日期存储为varchat不是一个好主意。使用日期类型我们不能在varchar中使用,因为之前其他人正在处理此类型,我无法更改类型。
str_to_date(DateAndTime, '%M %d, %Y at %I:%i%p')
-- create a new column and populate it
alter table CallList add DateAndTime2 datetime;
update CallList set DateAndTime2 = str_to_date(DateAndTime, '%M %d, %Y at %I:%i%p');
-- drop the old column and rename the new colum
alter table CallList drop column DateAndTime;
alter table CallList change DateAndTime2 DateAndTime datetime;