MySQL如果列值为,则返回true/false!=指定值
如何编写基于列的值返回true/false(实际上是1/0)的MySQL查询 在我的例子中,我想返回日期时间col的“hasDate”,我们称之为myDateTime 如果myDateTime的值为000-00-00 00:00:00,我希望返回hasDate为0(false) 如果myDateTime有任何其他值,我希望返回hasDate为1(true)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
感谢您的帮助。使用
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”转换为时间戳
或类似内容。