在sqlite中转换日期列,无法查询它

时间:2016-03-23 14:33:15

标签: sql database date sqlite

我将.csv文件导入SQLite数据库。我试图查询其中一个表。我认为这是挂在日期上的,这些日期是 MM / DD / YYYY 格式。并非所有月份和日期都是两位数。

我尝试过这个问题:

SELECT * FROM <table> 
WHERE 'account' = <account_number> 
and 'date' between '1900-01-01' and '2013-03-03'

我也试过了:

select * from <table> 
where 'account' = <account_number> 
and 'date' > '1901-01-01' and 'date' < '2013-03-03'

它不起作用。

1 个答案:

答案 0 :(得分:0)

列的名称不应放在单引号中。

select   * 
from     mytable 
where    account = <account_number> 
and      date between '1901-01-01' and '2013-03-02'

还请注意between

的使用

关于日期格式:当然,您应确保使用正确的YYYY-MM-DD格式插入记录。

如果您无法控制导入数据的格式,那么我建议您在导入后应用更正:

update mytable
set date = substr(date, -4) || '-' ||  
           substr('0' || substr(date, 1, instr(date, '/')-1), -2) || '-' ||
           substr('0' || substr(date, instr(date, '/')+1, 
                         length(date)-5-instr(date, '/')), -2)
where date like '_%/_%/____';

这将找到M / D / YYYY格式的任何日期(日期和月份为一位或两位数字),并将年份部分移至开头以获得YYYY-MM-DD格式。如果你确定原始格式是MM / DD / YYYY(而不是DD / MM / YYYY),那么这应该纠正所有这些日期。

查看将此修复程序应用于几个示例日期的this fiddle