我必须将日期时间与我的MySQL数据库的当前格式日期时间进行比较,但问题是我不知道如何从我的数据库中获取该格式。出于某种原因,当我将日期时间插入数据库时,它会自动将其转换为另一种格式,以更改小时和分钟。例如,如果我想插入'12:05:26',它将变为'17:10:30'。我想比较两种格式来验证我要插入的内容。
答案 0 :(得分:0)
也许是在插入时混合时间和日期?可能是因为您的数据库使用的语言设置与您插入的格式化日期不同。尝试使用Insert上的STR_TO_DATE()函数显式解析日期,以避免搞乱。
INSERT INTO someTable (someDateTime) VALUES
(STR_TO_DATE('22/03/2017 9:30:20 AM', '%c/%e/%Y %r'))
答案 1 :(得分:0)
我们可以使用DATE_FORMAT
函数将MySQL DATE
或DATETIME
值格式化为指定格式的字符串。例如:
SELECT DATE_FORMAT(NOW(),'%a, %M %e, %Y')
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format
进行格式转换的“它”究竟是什么?观察到的行为可能是可以解释的,但是没有看到产生这种行为的代码或语句,我们只是在猜测。
您是如何确定MySQL正在改变您提供的值?
MySQL具有日期时间字符串的标准格式:%Y-%m-%d %T
。
MySQL确实允许其接受的格式有一定的宽容度。参考手册说明
MySQL允许“放松”格式......
并且还警告冒号不一定保留时间,可以使用它们并将其解释为日期值的分隔符。并不是说我们真的想要这样做:
SELECT '2017:3:21-16_35_11' + INTERVAL 0 DAY
https://dev.mysql.com/doc/refman/5.7/en/datetime.html
MySQL还会识别数值(两位数的月,日,小时,分钟秒)。 yyyymmddhhmmss
,例如
SELECT 20170321163511 + INTERVAL 0 DAY
为了支持各种字符串格式,MySQL提供了方便的DATE_FORMAT
和STR_TO_DATE
函数。
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_str-to-date
CREATE TABLE foo (dt DATETIME PRIMARY KEY) ENGINE=INNODB;
INSERT INTO foo (dt) VALUES ('2017-03-21 12:05:26');
SELECT dt FROM foo;
SELECT DATE_FORMAT(dt,'%T') FROM foo;
DROP TABLE foo;