【问题标题】:MySQL IN BETWEEN with no conditionMySQL IN BETWEEN 无条件
【发布时间】:2013-06-11 09:35:40
【问题描述】:

我想写一个 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。

【问题讨论】:

  • 您可能最好将参数设为可空并执行 if 语句并拆分查询。它会更容易阅读,而且不会有太多额外的代码。
  • 我想知道除了更改查询之外还有其他方法吗。我正在寻找变量更改,即仅在值之间更改。
  • 你是如何传递日期的,通过参数还是硬编码?

标签: mysql sql database logic


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    你可以使用IFNULL函数

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

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

    【讨论】:

      【解决方案3】:

      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 - 可选日期值将用作条件

      【讨论】:

        猜你喜欢
        • 2015-07-09
        • 1970-01-01
        • 2011-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-19
        相关资源
        最近更新 更多