錯誤的答案這裏是我的表掌握MySQL的日期查詢
我執行,給我造成其item_valid_from
必須比今天的date
和item_valid_to
更大必須小於今天字段的查詢。
我的查詢是
select *
from tbl1
where item_valid_from >= CurDate()
and item_valid_to < CurDate()
任何解決方案?
錯誤的答案這裏是我的表掌握MySQL的日期查詢
我執行,給我造成其item_valid_from
必須比今天的date
和item_valid_to
更大必須小於今天字段的查詢。
我的查詢是
select *
from tbl1
where item_valid_from >= CurDate()
and item_valid_to < CurDate()
任何解決方案?
我勸你改變item_valid_*
領域格式DATE
場格式。你將在未來爲你節省很多麻煩。
但是沒關係,如果你不想這樣做,那麼你可以使用STR_TO_DATE()
功能:
SELECT *
FROM `table`
WHERE CURDATE() BETWEEN STR_TO_DATE(`from_field`, '%d-%m-%Y') AND STR_TO_DATE(`to_field`, '%d-%m-%Y')
如果我從varchar字段更改爲日期比正常查詢將工作 –
是的,那麼簡單地與'CURDATE()'比較就可以工作。但在更改字段格式之前,您需要將當前數據更改爲「YYYY-MM-DD」格式。 –
假設數據類型item_valid_from
和item_valid_to
是DATE,TIMESTAMP等,那麼你有你的操作員倒退。把時間想象成1970年以來的秒數,因爲這是它在unix時間的存儲方式。這意味着item_valid_from
將比item_valid_to
小,並且您希望在今天介於兩者之間時顯示它。您希望item_valid_from
小於或等於現在,並且item_valid_to
比現在更大(而不是過去)。
SELECT *
FROM tbl1
WHERE item_valid_from <= CURDATE() AND item_valid_to > CURDATE()
看到這個SQL Fiddle爲例,只有2-4是有效的,在結果在過去的日期是有效起至在將來的日期顯示。
'CURDATE'正在返回'YYYY-MM-DD'格式。那麼如何將'DD-MM-YYYY'與'CURDATE()'進行比較呢? –
它們是日期,而不是字符串,所以即使它們的格式如此,仍然可以將它們作爲日期進行比較。使用CURRENT_TIMESTAMP可能更合適,請查看我的Sql Fiddle示例。 – doublesharp
鏈接在哪裏? –
你必須使用下面的查詢其改變當前的日期格式,然後比較日期和取結果:
SELECT *
FROM tbl1
WHERE date_format(item_valid_from,'%d-%m-%Y') >= date_format(CurDate(),'%d-%m-%Y')
AND date_format(item_valid_to,'%d-%m-%Y') < date_format(CurDate(),'%d-%m-%Y')
我的字段日期格式是在dd-mm-YYYY,它不工作... –
我已更新我的答案。你只是在當前日期改變日期 –
它不工作你的解決方案是錯誤的,它只檢查它是不是在月份和年份字段工作,如果我使日期爲29-04-2014它工作,但對於04-04 -2014它不起作用 –
如果將存儲日期YYYY-MM-DD在' DATE'字段,你不會有任何問題... –
你的意思是我必須修改我的表格結構嗎? –
@sourabhkasliwal:如果你能做到這一點,請做到這一點.... –