【问题标题】:Strange problems with MySQL datetime queryMySQL日期时间查询的奇怪问题
【发布时间】:2011-08-14 18:45:26
【问题描述】:

这些结果有何意义?我不明白。
例如,由于没有日期为> 2010 的线程,最后一个查询不应该返回一个空集吗?为什么返回 2003 年的结果?

mysql> SELECT * 
       FROM thread 
       WHERE newsgroup_id = '64654' 
       AND 'thread_date' < '2010-09-10 21:43:05' 
       LIMIT 1;

空集(0.00 秒)

mysql> SELECT * 
       FROM thread 
       WHERE newsgroup_id = '64654' 
       AND 'thread_date' < '2000-09-10 21:43:05' 
       LIMIT 1;

空集(0.00 秒)

mysql> SELECT * 
       FROM thread 
       WHERE newsgroup_id = '64654' 
       AND 'thread_date' > '2000-09-10 21:43:05' 
       LIMIT 1;
+--------------+-----------+-----------+----------+---------------------+---------------------+---------------------------------+-------------------------+
| newsgroup_id | thread_id | postcount | hash     | thread_date         | thread_date_last        | thread_title                    | title_has_valid_charset |
+--------------+-----------+-----------+----------+---------------------+---------------------+---------------------------------+-------------------------+
|        64654 |         1 |         0 | O2gvcPRl | 2003-06-06 22:51:24 | 0000-00-00 00:00:00 | Vendo fotodigit  2.1  megapixel |                       0 |
+--------------+-----------+-----------+----------+---------------------+---------------------+---------------------------------+-------------------------+

集合中的 1 行(0.00 秒)

mysql> SELECT * 
       FROM thread 
       WHERE newsgroup_id = '64654' 
       AND 'thread_date' > '2010-09-10 21:43:05' 
       LIMIT 1;
+--------------+-----------+-----------+----------+---------------------+---------------------+---------------------------------+-------------------------+
| newsgroup_id | thread_id | postcount | hash     | thread_date         | thread_date_last    | thread_title                    | title_has_valid_charset |
+--------------+-----------+-----------+----------+---------------------+---------------------+---------------------------------+-------------------------+
|        64654 |         1 |         0 | O2gvcPRl | 2003-06-06 22:51:24 | 0000-00-00 00:00:00 | Vendo fotodigit  2.1  megapixel |                       0 |
+--------------+-----------+-----------+----------+---------------------+---------------------+---------------------------------+-------------------------+

集合中的 1 行(0.00 秒)

【问题讨论】:

  • 如果我是正确的,你不能这样做。这只是一个 ASCII 比较(基于文本),这就是为什么你会得到这些奇怪但“正确”的比较。查看如何在 mysql 中比较日期/时间
  • @Nupul: 你可以像 MySQL 中的字符串一样比较日期时间
  • @ypercube:我的错……应该澄清一下。我的意思是整体比较是基于字符串的(&lt;,&gt; 的 LHS 和 RHS)

标签: mysql


【解决方案1】:

您使用了错误的引号类型。 MySQL 认为您正在比较字符串“thread_date”。应该是这样的:

`thread_date` > '2010-09-10 21:43:05'

这样 MySQL 就知道你的意思是字段 thread_date 并将其与表达式右侧的日期进行比较。

【讨论】:

  • 或者根本没有反引号:... AND thread_date &gt; '2010-09-10 21:43:05' ...
【解决方案2】:

'thread_date' 是一个字符串,而不是该字段的值。

你的意思是:

`thread_date` > '2010-09-10 21:43:05'

【讨论】:

    猜你喜欢
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    相关资源
    最近更新 更多