0

我想编写一个 SQL 查询,如果没有分配日期时间,我想替换一个可以选择所有日期和时间的字符串。

实际上它是如何工作的:

    SELECT * FROM `entry` WHERE `user` like 'TOM' or `user` like 'PHP'
 and `entry_datetime` between '2013-03-13 22:20:18' and '2013-03-13 22:20:26' 

我的疑问:如果 php 没有获取日期的值 from 和 to 但我不想通过删除 AND 条件来更改查询但我想替换日期和时间之间的一些东西并且查询仍然应该运行:

    SELECT * FROM `entry` WHERE `user` like 'TOM' or `user` like 'PHP' and 
`entry_datetime` between ' ' and ' '

我尝试了以下但它不起作用?我们可以写这样的查询吗?

    SELECT * FROM `entry` WHERE `user` like 'TOM' or `user` like 'PHP' and 
`entry_datetime` between '%%' and '%%'

我只是尝试上面的方法,因为我们在 LIKE 命令中使用它,所以我尝试了?任何建议都会很有帮助。

我不知道我尝试的方式是对还是错,但我无法更改未分配日期值的查询 ID。

4

3 回答 3

2

您可以对日期时间数据类型使用 MIN 和 MAX 值。

... AND `entry_datetime` BETWEEN '1000-01-01 00:00:00' AND '9999-12-31 23:59:59'

DATETIME 类型用于同时包含日期和时间部分的值。MySQL 以 'YYYY-MM-DD HH:MM:SS' 格式检索和显示 DATETIME 值。支持的范围是“1000-01-01 00:00:00”到“9999-12-31 23:59:59”。

于 2013-06-11T09:44:43.833 回答
1

您可以使用该IFNULL功能

IFNULL(mindate, '1000-01-01');

问题是您需要知道您的日期范围,以便正确添加最小值和最大值。这假设您正在传入或创建一个名为 mindate 的变量。

于 2013-06-11T09:50:48.593 回答
1

1)

SELECT  *
FROM    `entry`
WHERE   `user` like 'TOM' or `user` like 'PHP'
and     `entry_datetime`
        between COALESCE('2013-03-13 22:20:18', '1000-01-01 00:00:00')
        and     COALESCE('2013-03-13 22:20:26', '9999-12-31 23:59:59');

2)

SELECT  *
FROM    `entry`
WHERE   `user` like 'TOM' or `user` like 'PHP'
and     `entry_datetime`
        between COALESCE(NULL, '1000-01-01 00:00:00')
        and     COALESCE(NULL, '9999-12-31 23:59:59');

如果您传递 NULL - 可选日期值将用作条件

于 2013-06-11T09:57:56.263 回答