3

我来自非数据库背景。我创建了一个具有字段数据类型 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 条记录。

我究竟做错了什么 ?为什么第一条语句失败?

请建议。

4

2 回答 2

3

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

简而言之,它认为 10 中的 1 小于您的值,而不是 10 多。这是字符串比较,而不是日期。

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

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

于 2012-11-28T13:56:38.430 回答
1

比较字符串时,从左到右比较值...

由于一个字符串比另一个字符串短,所以你有点比较这个......

'842-2-4'
'842-2-1'

好吧,没有什么是>= '842-2-4'AND <= '842-2-1'

  • 因为'842-2-1'来之前'842-2-4'
  • 并且,因此,也'842-2-10'出现在之前'842-2-4'

  • 就像'Squiggled'以前一样'Squiggly'

  • 'xxx-y-az'以前一样'xxx-y-z'


要根据需要进行比较,请确保所有日期都用0's 填充。

BETWEEN '0842-02-04' AND '0842-02-10'

但这只有在您也填充了表格中的值之后才会起作用。


编辑

另外,请注意,这假设您的格式是YYYY-MM-DD. 当一个字符串从左到右进行比较时,你必须在左边有最高的幅度值。

(这意味着您不能使用YYYY-DD-MM并且仍然让本机字符串比较按您希望的方式进行。)

于 2012-11-28T14:03:30.223 回答