SQlite查询选择今天的字符串日期或少于

时间:2019-02-06 02:47:52

标签: sqlite android-sqlite

我在查询中遇到问题 我无法获得想要的正确结果日期 我需要获取今天的所有日期或少于今天的日期

您能帮助我还是给我正确的查询以供使用

例如,这是 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')

预期结果是   id(number) datestring(string) 1 02/06/2019 2 02/06/2019 4 02/04/2019

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您遇到的问题是date('now')将返回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 As Understood By SQLite - Date And Time Functions

以下是一种可用于转换查询中的 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');