我来自非数据库背景。我已经创建了一个带有字段数据类型text的表。
dataF TEXT
插入:
已插入三条具有以下值的记录:
'842-2-4'
'842-2-5'
'842-2-6'
选择:
正在尝试根据日期获取记录。
... where dateF between '842-2-4' and '842-2-10'
它失败了。
鉴于,
... where dateF between '842-2-4' and '842-2-8'
检索所有3条记录。
我做错什么了?为什么第一次失败?
请建议。
最佳答案
比较字符串时,将从左到右比较值…
因为一个字符串比另一个短,所以你可以比较一下…
'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
,并且仍然让本机字符串比较按照您希望的方式进行。)