我必須通過傳遞日期來從數據庫中選擇所有行。例如,爲了獲得具有日期10/23/2012
如何在sqlite中按日期選擇行
所有行sqlite的分貝我這些信息存儲在DATE
列:
01/01/1900 11:00:00 AM
我曾嘗試用date()
得到,但我什麼也得不到日期:
select itemId, date(dateColumn) from items
所以我只需要比較日期,但無法找到如何在sqlite中執行此操作。
我必須通過傳遞日期來從數據庫中選擇所有行。例如,爲了獲得具有日期10/23/2012
如何在sqlite中按日期選擇行
所有行sqlite的分貝我這些信息存儲在DATE
列:
01/01/1900 11:00:00 AM
我曾嘗試用date()
得到,但我什麼也得不到日期:
select itemId, date(dateColumn) from items
所以我只需要比較日期,但無法找到如何在sqlite中執行此操作。
首先,格式化日期的ISO-8601標準選擇的itemId,dateColumn。將其包裝在Date()中以確保它作爲DATE進行處理。最後,構建您的範圍,使其包含從上午12:00起至第二天中午12:00之前的所有內容。
select itemId, dateColumn
from items
where dateColumn >= date('2012-10-23')
AND dateColumn < date('2012-10-23', '+1 day')
的SQLite列沒有輸入。但是,如果您將列與DATE進行比較(如圖所示),則將列數據強制轉換爲日期就足夠了(如果不是強制轉換則爲空),並且比較將正常工作。
例如在SQLFiddle:
create table items (
itemid, datecolumn);
insert into items select
1,'abc' union all select
2,null union all select
3,'10/23/2012 12:23' union all select
4,'10/23/2012' union all select
5,'2012-10-23 12:23' union all select
6,'2012-10-23' union all select
7,'2012-10-24 12:23' union all select
8,'2012-10-24' union all select
9,date('2012-10-24 12:23') union all select
10,date('2012-10-24');
結果:
itemid datecolumn
5 2012-10-23 12:23
6 2012-10-23
注意,雖然行3和4 出現是日期,他們都沒有,因爲他們不符合ISO-8601格式是SQLite唯一識別的格式。
把它寫成WHERE dateColumn BETWEEN date('2012-10-23')和date('2012-10-23','+1 day')'是不是更好? –
這不會是因爲那將包括2012-10-24的00:00:00。 '> ='和'<'模式專門設計爲在第二天午夜之前結束。 – RichardTheKiwi
SELECT itemId,dateColumn FROM items WHERE dateColumn=date('YYYY-MM-DD HH:MM:SS');
我只能通過這個YYYY-MM-DD(日期部分)。 – 1110
從項目 其中dateColumn = @date
在SQLite中,沒有數據類型DATE
,它存儲爲字符串。因此,字符串必須匹配,確切地說是相等的。
由於我們不希望出現這種情況,因此您需要將日期欄中的值「僞造」爲僞日期,並將您的參數轉換爲僞日期,以便將它們進行比較:
SELECT itemId FROM items WHERE date(dateColumn) = date("2012-10-22");
請注意,date-command的格式爲YYYY-MM-DD
,詳見this older question的答案。該問題還表明,您可以使用BETWEEN x AND y
-command來獲取日期,並匹配一個範圍。
使用'WHERE'子句選擇僅匹配X的日期 –
我試過了。但日期也有時間部分。我只需要按日期獲取行。在where子句中,我需要一些東西來獲取並比較整個日期/時間中的日期。我用date()函數嘗試過,但它不起作用。 – 1110