【问题标题】:Mysql wildcard query problemMysql通配符查询问题
【发布时间】:2011-01-11 15:42:00
【问题描述】:
WHERE `time` BETWEEN 'Jan 1 %' AND 'Jan 8 %' AND ...

结果

Jan 1 00:33:23
Jan 10 08:52:05

如何避免 1 月 10 日的结果?

我尝试了几种与 %、

有什么想法吗?

谢谢

【问题讨论】:

  • 你的“时间”栏是什么类型的?
  • time的数据类型是什么?
  • VARCHAR,我只是给出了带有这些时间戳的日期......

标签: mysql date between


【解决方案1】:
WHERE Time >= '1/1/2011' AND Time < '1/9/2011'

或者,如果您想要任何一年的结果:

WHERE DATEPART( month, Time ) = 1 AND DATEPART( day, Time ) < 9

【讨论】:

  • 我在他指定数据类型之前回答了。 BETWEEN 也不会按照他想要的方式工作。糟糕的餐桌设计。谁将日期存储在 varchar 中?
  • 看来我要尝试将一列中的日期转换为新的列设置为日期...
【解决方案2】:

目前使用此查询会使搜索引擎感到困惑,因为“between”是为数字或日期设计的,而您将其用于字符串。

您的问题有两种解决方案:

1) 将您的“时间”字段转换为“日期”并将日期存储为“01-01-2010 00:00”(这是最健康的解决方案,因为您将使数据库知道这是一个日期字段) 2)尝试:

WHERE `time` >= 'Jan 1' AND `time` < 'Jan 2'

第二种解决方案可能会产生奇怪的结果,因为它比较的是 2 个字符串,而不是 2 个日期。

【讨论】:

    【解决方案3】:

    我不能在这里为您尝试,但是您为什么不尝试使用 STR_TO_DATE 方法呢?您可以将时间字段更改为真实日期,然后不需要进行该字符串比较:

    WHERE STR_TO_DATE(`time`,'%d,%m,%Y') BETWEEN
    '2010-01-01'
    AND
    '2010-01-09'
    

    另外,请参阅http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      相关资源
      最近更新 更多