2011-08-14 118 views
1

這些結果如何有意義?我不明白。
不應該例如最後一個查詢返回一個空集,因爲沒有線程與日期> 2010?它爲什麼會返回2003年的結果?MySQL日期時間查詢的奇怪問題

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秒)

+1

如果我是正確的,你不能做到這一點。這只是一個ASCII比較(基於文本),這就是爲什麼你得到這些奇怪的,但'正確的'比較。查看如何在mysql中比較日期/時間 – PhD

+1

@Nupul:你可以比較日期時間,就好像它們是MySQL中的字符串 –

+0

@ypercube:我的不好...應該澄清。我的意思是整體比較是基於字符串的(LHS和RHS'<,>') – PhD

回答

7

您正在使用錯誤的引號。 MySQL認爲你正在比較字符串「thread_date」。這是應該的:

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

這樣的MySQL知道你的意思領域thread_date,它在表達的右側比較的日期。

+2

或根本沒有反引號:'... AND thread_date>'2010-09-10 21:43:05'...' –

0

'thread_date'是一個字符串,而不是該字段的值。

您的意思是:

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