SQlite Query выбрать строковую дату сегодня или меньше - PullRequest
0 голосов
/ 06 февраля 2019

У меня возникла проблема в запросе. Я не могу получить правильные даты результата, которые мне нужны. Мне нужно получить всю дату с сегодняшнего дня или меньше, чем дата сегодня.

Можете ли вы мне помочь или дать мне правильный запрос на использование * 1003?*

например, это mytable

id(number) datestring(string)
1          02/06/2019
2          02/06/2019 
3          02/14/2019
4          02/04/2019
5          03/17/2019

запрос, который я использую: SELECT * FROM mytable WHERE datestring <= date ('now') </strong>

ожидаемый результат id(number) datestring(string) 1 02/06/2019 2 02/06/2019 4 02/04/2019

Спасибо за помощь

1 Ответ

0 голосов
/ 06 февраля 2019

Проблема, с которой вы сталкиваетесь, состоит в том, что дата («сейчас») вернется 2019-02-06, так как все строки в таблице начинаются с 0, и это значение меньше 2.

Вынеобходимо либо преобразовывать даты в тот же формат, что и другие, либо использовать тот же формат при хранении данных.

Сам SQLite имеет различный формат дат, который можно распознать и использовать, и рекомендуетсяиспользуйте один из них, так как это уменьшает необходимую сложность.

Строки времени Строка времени может иметь любой из следующих форматов:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD

SQL как понятноПо SQLite - Функции даты и времени

Ниже приведено решение, которое можно использовать для преобразования столбца datestring в запросе: -

SELECT * FROM mytable WHERE substr(datestring,7,4)||'-'||substr(datestring,1,2)||'-'||substr(datestring,4,2) <= date('now');

Для преобразования существующих данных в распознанный формат можно использовать следующее: -

UPDATE mytable SET datestring = substr(datestring,7,4)||'-'||substr(datestring,1,2)||'-'||substr(datestring,4,2);

За этим может следовать исходный запрос

SELECT * FROM mytable WHERE datestring <= date('now');
...