在sqlite中使用字符串dd mm yyyy格式比较日期

在sqlite中使用字符串dd mm yyyy格式比较日期,sqlite,Sqlite,我将日期存储为“dd-mm-yyyy”格式的字符串。现在我想做一个这样的比较: SELECT strftime('%d/%m/%Y', myDate) as myDate FROM myTable WHERE myDate>='01/07/2013' and myDate<='24/07/2013' 选择strftime(“%d/%m/%Y”,myDate)作为myDate 从myTable 其中myDate>='01/07/2013'和myDate您是否尝试了以下方法: SELE

我将日期存储为“dd-mm-yyyy”格式的字符串。现在我想做一个这样的比较:

SELECT strftime('%d/%m/%Y', myDate) as myDate
FROM myTable
WHERE myDate>='01/07/2013' and myDate<='24/07/2013'
选择strftime(“%d/%m/%Y”,myDate)作为myDate
从myTable
其中myDate>='01/07/2013'和myDate您是否尝试了以下方法:

SELECT strftime('%d/%m/%Y', myDate) as myDate
FROM myTable
WHERE myDate between date('01/07/2013') and date('24/07/2013');

在当前设置下,您无法使查询像这样工作:


我将日期存储为字符串,所以我想通过使用strftime,我可以得到我想要的。还是我错了

基本上:你错了

这里的问题是,这样格式化的字符串将无法按您想要的方式进行排序

具体而言:

myDate>='01/07/2013' and myDate<='24/07/2013'

这将分离字符串,在进行比较之前,按正确的顺序将它们重新组合在一起。还要注意最后两个日期的格式。

SQLite不使用该日期格式。我将日期存储为字符串,因此我想使用strftime可以得到我想要的。还是我错了?如果你将日期存储为字符串,那你就错了。如果您将日期存储为该格式的字符串,那么您就大错特错了。该格式不利于排序/比较/排序,因此使用大于或小于的任何比较都将产生不正确的值。具体来说,“01/07/2013”将小于“02/01/1900”,因为您使用的是字母数字比较,即字符串。相反,您应该将日期存储为日期,而不是字符串!这并不是标记问题的重复,因为这是字符串比较,而不是日期时间比较。请使用下面的链接获取我的答案,但不起作用:(“不起作用”,请更具体一点。您收到错误消息了吗?它是否产生了任何结果?如果是,是什么样的结果?您能看到结果中的模式吗?我只是没有得到任何结果。没有错误。这是因为
日期('01/07/2013'))
返回
null
。在任何情况下,如果不分离字符串并将其重新格式化为正确的日期,您都无法使其正常工作。您应该使用| |而不是+来压缩字符串。您是对的,奇怪为什么以前没有人注意到这一点,很好。
where (substr(myDate, 7, 4) || '-' || substr(myDate, 4, 2) || '-' || substr(myDate, 1, 2)) between '2013-07-01' and '2013-07-24'