我以"dd-mm-yyyy"格式将我的日期存储为字符串.现在我想做这样的比较:
SELECT strftime('%d/%m/%Y', myDate) as myDate
FROM myTable
WHERE myDate>='01/07/2013' and myDate<='24/07/2013'
Run Code Online (Sandbox Code Playgroud)
但我一无所获.这个查询有什么问题?
这不是一个重复的问题.我将所有内容存储为String,而不是DATE或DATETIME.我试图用日期格式比较字符串.投票结果不公平.
您无法使用当前设置让查询像这样工作:
我将日期存储为字符串所以我想使用strftime我可以得到我想要的.还是我错了?
基本上:你错了!
这里的问题是,像这样格式化的字符串将无法以您想要的方式排序.
特别:
myDate>='01/07/2013' and myDate<='24/07/2013'
Run Code Online (Sandbox Code Playgroud)
在这里,任何一年中任何一个月的第一个和第24个之间的任何日期都将与此匹配.IE浏览器.这将匹配:"02/01/1900",这将是:"02/12/2099".
原因是字符串比较是字母数字,而不是数字(或日期)."02"大于"01"且小于"24",其余的只是多余的.
将日期格式化为字符串的"逻辑"方式是从最重要的值开始,向下工作,即.这种格式:"yyyy/mm/dd",而不是相反,但存储日期的真正逻辑方式是将其存储为日期,而不是字符串.
使用字符串的唯一方法是将每个字符串转换为日期并使用它,但最好的方法是修复您的模式.
如果你绝对无法改变你当前的架构,这是一种让它工作的方法,但我不建议这样做:
where (substr(myDate, 7, 4) || '-' || substr(myDate, 4, 2) || '-' || substr(myDate, 1, 2)) between '2013-07-01' and '2013-07-24'
Run Code Online (Sandbox Code Playgroud)
在进行比较之前,这将拆分字符串,再次以正确的顺序将它们组合在一起.另请注意那里最后两个日期的格式.
归档时间: |
|
查看次数: |
13931 次 |
最近记录: |