2016-12-02 4 views
0

У меня есть некоторые данные в sqllite дб формы:Выбор записи между 2 датами с 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. Kicker заключается в том, что есть некоторые промежуточные записи, которые недействительны и не имеют даты. Я хочу также выбрать их, чтобы в итоге я получил все записи между id 111-338

Все столбцы, за исключением id, находятся в текстовом формате.

Как я могу это сделать?

+0

Вы можете показать, как выглядят эти неверные даты? датируется ли поле varchar? –

+0

'Есть некоторые промежуточные записи, которые являются недействительными' ... фактически _all_ даты выглядят недействительными. Никогда не храните даты в виде текста. –

+0

см. Выше – user61629

ответ

1

Не пуленепробиваемый, но стоит попробовать.

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

Спасибо, это фантастика. Мне нужно будет больше узнать о cast, substr и instr – user61629

+0

Instr() возвращает позицию строки в другой строке, Substr() возвращает часть другой строки (используется вместе, эти два вместе говорят _get me this start wherever это is_) и Cast(), естественно, приводит результаты подстроки к другому типу. – jleach

1

столбец дата имеет вид дд/мм/гггг

Это ваша проблема. Вы должны использовать формат yyyy-mm-dd, который сортируется в лексикографическом порядке и совместим с SQLite date and time functions.

+2

И это касается всех баз данных (и программирования в целом), а не только sqlite. Все, что не в этом формате ISO, должно быть только для целей презентации. – jleach

+0

Спасибо, ребята. – user61629

+0

@ jd134679 Фактически это не относится к большинству баз данных, поскольку они поддерживают типы дат. –

Смежные вопросы