2011-05-04 48 views
4

我正在使用SQLite的项目和<符号不起作用的查询。SQLite少于运营商问题

有一个名为Holidays的表,它有一个数据类型为datetime的字段。

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

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

上述查询中的<符号不起作用。 >符号在上面的查询工作正常。

请帮帮我。

+0

正是你的意思与 “不工作” 是什么。你有错误吗? – 2011-05-04 09:24:58

+0

即使有满足上述条件的行,我也没有得到任何输出。没有错误。 – 2011-05-04 09:26:28

+0

节假日的定义是什么? – 2011-05-04 09:35:25

回答

12

尝试:

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

(date format must be YYYY-MM-DD) 
+0

谢谢。有效。 – 2011-05-04 10:20:45

4

sqlite中没有datetime数据类型。

SQLite的只有4种类型:

  • integeral数
  • 浮点数
  • 字符串(储存或者作为UTF-8或UTF-16和自动转换)
  • 团块

此外,sqlite是清单类型的,这意味着任何列可以保存任何类型的值。声明的类型用于只有两两件事:

  • 插入值转换为指定类型的如果他们似乎转换(和它似乎并不适用于与sqlite_bind_*方法必定会在所有值)
  • 它提示索引或优化以某种方式(我只知道它有使用索引时没有输入列麻烦)

更糟糕的是,sqlite的会默默接受什么类型。如果它以“int”开头,如果它包含“char”或“text”,则它会将其解释为整数类型,如果其为“real”,“double”或“number”并且为blob如果它是“blob”。在其他情况下,该列仅仅是无类型的,这对于sqlite来说没有问题,因为输入的方式很少。

这意味着'1/1/2011'只是一个字符串,既不以格式'mm/dd/yyyy'进行日期格式为'dd/mm/yyyy'的日期按按日期排序的格式(unicodebetically确实) 。

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

+0

我以ISO格式存储日期。我怎样才能得到上述查询的输出。我可以使用>和<日期 – 2011-05-04 09:55:30

+1

是的,使用'<' and '>'。 Sqlite将它们作为字符串进行比较,但在ISO格式中,它与作为日期进行比较一致。只要确保将0填入固定宽度的字段中,即始终使用“01”而不是“1”。 – 2011-05-04 10:48:40