sqlite3中的日期处理令人困惑。

时间:2012-11-28 13:51:31

标签: sql c database sqlite

我来自非数据库背景。我创建了一个表格,其中包含一个字段数据类型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条记录。

我做错了什么?为什么第一个法令失败?

请建议。

2 个答案:

答案 0 :(得分:3)

因为您正在比较字符串而不是日期。电脑不知道这些是日期。您必须存储日期并进行日期比较或实现您自己的逻辑来分析字符串。

简单地说,它将十分之一视为小于你的价值而不是十分之一。这是字符串比较,而不是日期。

虽然sqlite不支持日期类型,但它确实具有处理它们的功能。见这里:

http://www.sqlite.org/lang_datefunc.html

答案 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,并且仍然可以根据需要执行原生字符串比较。)