Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL如果列值为,则返回true/false!=指定值_Mysql_Database - Fatal编程技术网

MySQL如果列值为,则返回true/false!=指定值

MySQL如果列值为,则返回true/false!=指定值,mysql,database,Mysql,Database,如何编写基于列的值返回true/false(实际上是1/0)的MySQL查询 在我的例子中,我想返回日期时间col的“hasDate”,我们称之为myDateTime 如果myDateTime的值为000-00-00 00:00:00,我希望返回hasDate为0(false) 如果myDateTime有任何其他值,我希望返回hasDate为1(true) 感谢您的帮助。使用IF语句 SELECT IF(myDateTime = '0000-00-00 00:00:00',0,1) AS has

如何编写基于列的值返回true/false(实际上是1/0)的MySQL查询

在我的例子中,我想返回日期时间col的“hasDate”,我们称之为myDateTime

如果myDateTime的值为000-00-00 00:00:00,我希望返回hasDate为0(false)

如果myDateTime有任何其他值,我希望返回hasDate为1(true)


感谢您的帮助。

使用
IF
语句

SELECT IF(myDateTime = '0000-00-00 00:00:00',0,1) AS hasDate FROM myTable

但最好的办法是更改数据结构以避免这样做。

使用
IF
语句

SELECT IF(myDateTime = '0000-00-00 00:00:00',0,1) AS hasDate FROM myTable


但最好的办法是更改数据结构以避免这样做。

只是指出NULL的含义是显而易见的,但“不存在”。与Joachim不同,在这种情况下,
myDateTime
应该可以为NULL。查询和确定一个列是否为NULL而不是一个特定的(伪造的)零值,这样做的工作量更少,也更合理。好的,所以最好的办法是改为使用NULL值而不是伪造的0000-00-00 00:00:00值,然后检查是否为NULL。结果查询会是这样的:选择col1、col2、col3、IF(myDateTime=NULL,0,1),其中myTableNULL中的id=1234是一种特殊情况,因为它等于零(包括NULL),所以您需要使用
IF(myDateTime为NULL,0,1)
,,否则与往常一样。感谢您澄清Joachim必须指出显而易见的,但“不存在”是NULL的含义。与Joachim不同的是,在这种情况下,
myDateTime
应为NULL。查询和确定一个列是否为NULL而不是一个特定的(伪造的)零值,这样做的工作量更少,也更合理。好的,所以最好的办法是改为使用NULL值而不是伪造的0000-00-00 00:00:00值,然后检查是否为NULL。结果查询会是这样的:选择col1、col2、col3、IF(myDateTime=NULL,0,1),其中myTableNULL中的id=1234是一种特殊情况,因为它等于零(包括NULL),所以您需要使用
IF(myDateTime为NULL,0,1)
,,否则与往常一样。感谢您澄清JoachimIf表有10000行,这将返回10000次“0”,对吗?谢谢,这应该可以工作,直到我可以更改数据结构为止。不幸的是,我现在没有能力这么做。我仍然不知道如何测试
0000-00-00:00:00
,因为MySQL的可接受范围是
1000-01-01 00:00:00
9999-12-31 23:59:59
(根据)@bradcristie根据同一个文档:这个规则的唯一例外是特殊的“零”值“0000-00-00”
0000-00-00
对于
DATETIME
字段,表示
0
。@MathieuImbert:非法值被转换为该格式。尝试插入值;您应该看到
无法将第2列中的值“0000-00-00 00:00:00”转换为时间戳
或类似的值。如果表有10000行,这将返回10000次“0”,对吗?谢谢,在我更改数据结构之前,这应该有效。不幸的是,我现在没有能力这么做。我仍然不知道如何测试
0000-00-00:00:00
,因为MySQL的可接受范围是
1000-01-01 00:00:00
9999-12-31 23:59:59
(根据)@bradcristie根据同一个文档:这个规则的唯一例外是特殊的“零”值“0000-00-00”
0000-00-00
对于
DATETIME
字段,表示
0
。@MathieuImbert:非法值被转换为该格式。尝试插入值;您应该看到,
无法将第2列中的值“0000-00-00:00:00”转换为时间戳
或类似内容。