select '2011-02-29' BETWEEN '2011-02-01' AND '2011-03-03'
這是返回1.我認爲之間不考慮閏年。我想要你對此的看法?mysql之間的運算符與日期
[編輯]
SELECT DATE('2010-04-31')
是返回NULL;
但select str_to_date('2010-04-31', '%Y-%m-%d')
是重新調整日期。
爲什麼?
感謝 VENU
select '2011-02-29' BETWEEN '2011-02-01' AND '2011-03-03'
這是返回1.我認爲之間不考慮閏年。我想要你對此的看法?mysql之間的運算符與日期
[編輯]
SELECT DATE('2010-04-31')
是返回NULL;
但select str_to_date('2010-04-31', '%Y-%m-%d')
是重新調整日期。
爲什麼?
感謝 VENU
您需要將其轉換爲日期,如:
SELECT DATE('2011-02-29') BETWEEN DATE('2011-02-01') AND DATE('2011-03-03')
從網站:
爲了獲得最佳效果與日期或時間值之間使用時,使用CAST()將顯式地將值轉換爲所需的數據類型。 示例:如果將DATETIME與兩個DATE值進行比較,請將DATETIME值轉換爲DATETIME值。如果在比較日期時使用字符串常量(如 '2001-1-1'),則將字符串強制轉換爲日期。
問題是你在比較字符串,而不是日期。 如果你嘗試:
select DATE('2011-02-29') you get a NULL...
你比較字符串...你必須投中的值(或至少是第一個)爲DATE
使用此:
SELECT DATE('2011-02-29') BETWEEN '2011-02-01' AND '2011-03-03'
這會給你NULL,因爲日期不是真實的。
SELECT DATE('2008-02-29') BETWEEN '2008-02-01' AND '2008-03-03'
這會給你1(TRUE),因爲日期是真實的(閏年)
感謝阿齊茲的清晰解釋! – Venu
DATE
檢查的有效性,同時str_to_date
沒有。
mysql> select str_to_date('2010-02-31', '%Y-%m-%d');
+---------------------------------------+
| str_to_date('2010-02-31', '%Y-%m-%d') |
+---------------------------------------+
| 2010-02-31 |
+---------------------------------------+
1 row in set (0.00 sec)
mysql> select str_to_date('2010-04-31', '%Y-%m-%d');
+---------------------------------------+
| str_to_date('2010-04-31', '%Y-%m-%d') |
+---------------------------------------+
| 2010-04-31 |
+---------------------------------------+
1 row in set (0.00 sec)
mysql> select date('2010-02-31');
+--------------------+
| date('2010-02-31') |
+--------------------+
| NULL |
+--------------------+
1 row in set, 1 warning (0.00 sec)
mysql> select date('2010-04-31');
+--------------------+
| date('2010-04-31') |
+--------------------+
| NULL |
+--------------------+
1 row in set, 1 warning (0.00 sec)
UPDATE根據@Aziz,DATE
將檢查日期是否是真的還是假的。根據我的測試,似乎str_to_date
不檢查。
我認爲它的實現選擇? str_to_date只是不檢查... –
是的,我同意你的意見! – Venu