Mysql没有正确验证日期字段?

时间:2014-11-24 06:11:35

标签: mysql

UPDATE2:请不要在声明中更正声明。仔细阅读问题!

我已经知道下面的陈述错了。请正确阅读问题!

以下查询我注意到正在使用MySql,我预计由于格式错误而导致错误或空数据 -

select * from test where date='"2014-11-24'; 

而是MySql为date=''提供输出。它是预期还是一个错误?

我预计会出现语法错误(" 未结束),或者没有数据(搜索整个日期,即"2014-11-24哪个不存在)。

UPDATE1 :大家好,我知道我的语法有错误,而且没有给出空行。我有一些日期为空的行(非空),如date =''。 我收到了这些条目!

4 个答案:

答案 0 :(得分:2)

'"2014-11-24'
 ^

是无效日期。但语法没有问题,因此它计算成为一个不存在的日期,然后返回没有日期的结果,即null。

'2014-11-24'

有效

这也可以通过以下测试确认

SELECT UNIX_TIMESTAMP('2014-11-24')    // valid value is returned

VS

SELECT UNIX_TIMESTAMP('"2014-11-24')    // 0 is returned because the date was invalid

修改

好的,似乎它仍然不清楚。以此为例,它将消除混淆

SELECT UNIX_TIMESTAMP("")  // Empty string right? guess what; returns 0

这意味着对于无效日期,值计算为0,对于计算为0的空日期,对于null,它计算为0. 0=0=0 :)这就是为什么你看到的结果当你去一个无效的日期时,你的桌子上的日期是空的。

答案 1 :(得分:0)

查询中双引号(“)的目的是什么?

'"2014-11-24'
 ^

试试这个:

SELECT * FROM test WHERE date = '2014-11-24'; 

答案 2 :(得分:0)

查询在"2014-11-24表中搜索test值。该记录属于测试表中不存在的"2014-11-24值,因此返回空值。

答案 3 :(得分:-1)

SELECT * FROM `test` WHERE Date = '2014-11-21'