为什么MySQL在DATE列中忽略多个破折号分隔符?

时间:2019-07-15 09:13:40

标签: mysql database

为什么以下情况有效? MySQL是否将多个破折号'---转换为单个'-'破折号。我试图为此找到一个解释,但找不到任何东西。

WHERE DATE(login_at) = '2019---04---30'

有人可以向我解释这是如何工作的吗?

我正在使用MySQL版本:5.7.18

1 个答案:

答案 0 :(得分:2)

MySQL通过自动解释各种定界符并将其转换为正确的date [time]格式,提供了灵活性。在documentation中有很好的解释:

  

MySQL允许在指定为字符串的值中使用“松弛”格式,   任何标点符号都可以用作之间的分隔符   日期部分或时间部分。在某些情况下,此语法可能具有欺骗性。   例如,“ 10:11:12”之类的值可能看起来像一个时间值   由于:,但如果使用,则解释为年份'2010-11-12'   在日期上下文中。值'10:45:15'转换为'0000-00-00'   因为“ 45”不是有效月份。

     

在日期和时间部分与   小数秒部分是小数点。

因此,在您的情况下,MySQL将分隔符视为---,因此隐式转换为Y-m-d格式。

但是,使用标准的 Y-m-d h:i:s 格式表示日期/日期时间值总是更好且安全