我来自非数据库背景。我创建了一个表格,其中包含一个字段数据类型TEXT。
dataF TEXT
INSERTION:
已插入三条带有值的记录:
'842-2-4'
'842-2-5'
'842-2-6'
SELECTION:
立即根据日期获取记录。
... where dateF between '842-2-4' and '842-2-10'
失败了。
然而,
... where dateF between '842-2-4' and '842-2-8'
检索所有3条记录。
我做错了什么?为什么第一个法令失败?
请建议。
答案 0 :(得分:3)
因为您正在比较字符串而不是日期。电脑不知道这些是日期。您必须存储日期并进行日期比较或实现您自己的逻辑来分析字符串。
简单地说,它将十分之一视为小于你的价值而不是十分之一。这是字符串比较,而不是日期。
虽然sqlite不支持日期类型,但它确实具有处理它们的功能。见这里:
答案 1 :(得分:1)
比较字符串时,值从左到右进行比较......
因为一个字符串比另一个字符串短,所以你可以比较一下......
'842-2-4'
'842-2-1'
嗯,没有什么是>= '842-2-4'
和<= '842-2-1'
。
'842-2-1'
位于'842-2-4'
之前。 因此,'842-2-10'
也在'842-2-4'
之前。
正如'Squiggled'
之前的'Squiggly'
'xxx-y-az'
来自'xxx-y-z'
要根据需要进行比较,请确保所有日期都填入0
个。
BETWEEN '0842-02-04' AND '0842-02-10'
但是只有 之后你才能在表中填写值。
修改强>:
另请注意,此假设您的格式为YYYY-MM-DD
。当字符串从左到右进行比较时,必须在左侧具有最高的幅度值。
(这意味着您无法使用YYYY-DD-MM
,并且仍然可以根据需要执行原生字符串比较。)