2016-12-02 59 views
0

我有一些数据形式的sqllite DB:选择记录与sqllite

id column1 date 
111 280 1/1/2014 
112 281 invalid invalid invalid 
113 282 invalid invalid invalid 
114 275 1/2/2014 
...................... 
338 273 1/31/2014 

我想选择在一月份的所有记录。日期列的格式为mm/dd/yyyy。踢球者是有一些中间记录是无效的,没有日期。我也想选择这些,以便我结束所有记录之间的ID 111-338

除ID以外的所有列都是文本格式。

我该怎么做?

+0

你能展示这些无效日期的样子吗?是日期一个varchar字段呢? –

+0

'有一些无效的干预记录......实际上所有的日期看起来无效。切勿将日期存储为文本。 –

+0

请参阅上面的 – user61629

回答

1

不是防弹的,但值得一试。

select * 
from t 
where cast (substr(date,1,instr(date,'/')-1) as int) in (0,1) 
; 
+0

谢谢,这太棒了。 substr和instr – user61629

+0

Instr()返回字符串在另一个字符串中的位置,Substr()返回另一个字符串的一部分(联合使​​用,这两者一起说_get我这是从哪里开始的即is_)和Cast()自然地将子串的结果转换为不同的类型。 – jleach

1

日期列的格式为MM/DD/YYYY

这是你的问题。您应该使用yyyy-mm-dd格式,按照字典顺序排列,并且与SQLite date and time functions兼容。

+2

这就适用于所有数据库(以及一般的编程),而不仅仅是sqlite。任何非ISO格式的内容都只能用于演示目的。 – jleach

+0

谢谢你们。 – user61629

+0

@ jd134679实际上与大多数数据库无关,因为它们支持日期类型。 –