SQLite少于运算符问题

时间:2011-05-04 09:23:03

标签: sqlite

我正在将SQLite用于项目并且<符号在查询中不起作用。

有一个名为Holidays的表,其中包含一个数据类型为datetime的字段。

假设该表包含HolidayDate列中当前年份的某些日期。

SELECT HolidayDate
  FROM Holidays
 WHERE (HolidayDate >= '1/1/2011')
   AND (HolidayDate <= '1/1/2012')

&lt;上述查询中的符号无效。 &GT;上述查询中的符号运作良好。

请帮帮我。

2 个答案:

答案 0 :(得分:13)

尝试:

SELECT HolidayDate
  FROM Holidays
 WHERE HolidayDate >= date('2011-01-01')
   AND HolidayDate <= date('2012-01-01')

(日期格式必须为YYYY-MM-DD

答案 1 :(得分:4)

sqlite中没有datetime数据类型。

Sqlite只有4种类型:

  • integeral number
  • 浮点数
  • string(存储为utf-8或utf-16并自动转换)
  • 团块

此外,sqlite是manifest-typed,这意味着任何列都可以保存任何类型的值。声明的类型仅用于两件事:

  • 插入的值将转换为指定的类型如果它们似乎是可转换的(并且它似乎不适用于完全使用sqlite_bind_*方法绑定的值)
  • 它以某种方式提示索引器或优化器(我只知道在未键入列时使用索引时遇到问题)

更糟糕的是,sqlite会默默接受任何作为类型。如果它以“int”开头,则将其解释为整数类型,如果它包含“char”或“text”,则将其解释为字符串,如果它是“real”,“double”或“number”,则将其解释为浮点数如果它是“blob”。在其他情况下,该列只是无类型,这对于sqlite没有任何问题,因为打字意味着什么。

这意味着'1/1/2011'只是一个字符串,既不是以'mm / dd / yyyy'格式的日期,也不是以'dd / mm / yyyy'格式的日期,按日期排序时按字母排序(实际上是unicodebetically)。

如果您以ISO格式('yyyy-mm-dd')存储日期,那么asciibetical排序将与日期排序兼容,您就没有问题。