mysql - DATETIME 上的 IFNULL 不适用于比较

标签 mysql sql sql-date-functions

我有以下架构:

CREATE TABLE test (
    colA DATETIME,
    colB DATETIME
);

INSERT INTO test (colA, colB) VALUES ('2017-01-01', NULL);

这是我尝试在此架构上运行的一些 SQL:

SELECT
    colA < IFNULL(colB, '9999-99-99') AS a,
    colA < '9999-99-99' AS b,
    IFNULL(colB, '9999-99-99') AS c
FROM test;

我的问题是...为什么在 SELECT 结果中,a 为 0,而 b 为 1? 2017-01-01 小于 9999-99-99...

鉴于 a 为 0...我该怎么做才能使其变为 1? IE。这样比较运算符右侧的日期/总是/设置为最新的可能日期(以便没有日期落在它之后..)

SQL fiddle :http://sqlfiddle.com/#!9/82fe8d/2

最佳答案

日期与非日期相比并没有多或少

以下查询将按预期工作

SELECT 
    colA < IFNULL(colB, '2017-01-02') AS a,
    colA < '2017-01-02' AS b,
    IFNULL(colB, '2017-01-02') AS c
FROM test;

你也可以尝试这个来看看我的意思:

SELECT
    colA < IFNULL(colB, CAST('9999-99-99' AS DATETIME)) AS a,
    colA < CAST('9999-99-99' AS DATETIME) AS b,
    IFNULL(colB, '9999-99-99') AS c
FROM test;

关于mysql - DATETIME 上的 IFNULL 不适用于比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41815904/

相关文章:

sql - 使用 SELECT 结果作为其他 SELECT 中的 COLUMN 名称

mysql - 如何更改MySQL表内的日期格式?

sql - 上个月的Oracle日期函数

sql - 在 PostgreSQL 中是否有需要年月日来创建日期的函数?

mysql - SQL链接5个表

php - 如何将刚刚插入的行从 MySql 获取到 php 变量?

php - Mysql ssl连接与真正的连接给出错误

mysql - 无法在 phpmyadmin 上创建触发器

zend-framework - 禅德数据库 : joinLeft problem

mySql新行只能用LIKE搜索,以前有人有过这样的经历吗?