MySql DataBase的当前日期时间

时间:2017-03-22 19:59:38

标签: mysql datetime

我必须将日期时间与我的MySQL数据库的当前格式日期时间进行比较,但问题是我不知道如何从我的数据库中获取该格式。出于某种原因,当我将日期时间插入数据库时​​,它会自动将其转换为另一种格式,以更改小时和分钟。例如,如果我想插入'12:05:26',它将变为'17:10:3​​0'。我想比较两种格式来验证我要插入的内容。

2 个答案:

答案 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 DATEDATETIME值格式化为指定格式的字符串。例如:

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_FORMATSTR_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;