Maria DB / MySQL在比较TimeStamp

时间:2016-12-15 08:13:30

标签: mysql date

我有两个不同的开发环境,即MySQL 5.6& Maria DB 10.0

我使用像time>="userInputBeginTime"这样的WHERE查询来限制数据的最小日期。

不幸的是,前端提供了错误的日期信息(在我的情况下,预期的输入是日期字符串格式化为" yyyy-MM-dd",但真正的输入是"无效的日期& #34;由于javascript错误)

然后我发现了MySQL与...之间的区别Maria DB

在MySQL中:

SELECT NOW() > "Invalid Date" test;
+-----------+
|      test |
+-----------+
|         0 |
+-----------+

在Maria DB:

SELECT NOW() > "Invalid Date" test;
+-----------+
|      test |
+-----------+
|         1 |
+-----------+

这种差异直接导致了MySQL没有返回任何内容的不同结果,Maria DB返回了所有内容。

我认为他们可能会使用不同的方法进行比较

我的临时解决方案是使用像这样的

SELECT * FROM table_name 
WHERE 
  NOT ISNULL(CONVERT("userInputBeginTime",datetime)) 
  AND time >= "userInputBeginTime"

强制Maria DB在检测到无效输入时不返回任何内容。

我想知道是否有更好的解决方案?

最好的问候

1 个答案:

答案 0 :(得分:0)

您可以尝试使用STR_TO_DATE将字符串解析为您期望的格式的日期。如果它无法以指定的格式解析日期,则此函数将返回NULL。您的错误JavaScript输入将属于此类别,应生成NULL

SELECT *
FROM table_name
WHERE STR_TO_DATE(userInput, '%Y-%m-%d') IS NOT NULL AND
      <other conditions here>

STR_TO_DATE in MariaDB
STR_TO_DATE in MySQL