Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite小于运算符问题_Sqlite - Fatal编程技术网

SQLite小于运算符问题

SQLite小于运算符问题,sqlite,Sqlite,我正在为一个项目使用SQLite,=“2011年1月1日”) 上述查询中的(HolidayDate)符号工作正常 请帮助我。sqlite中没有日期时间数据类型 Sqlite只有4种类型: 整数 浮点数 字符串(存储为utf-8或utf-16并自动转换) 斑点 此外,sqlite是清单类型的,这意味着任何列都可以保存任何类型的值。声明的类型仅用于两种用途: 如果插入的值似乎是可转换的,则会将其转换为指定类型(并且它似乎根本不适用于使用sqlite\u bind\uu*方法绑定的值) 它以某种

我正在为一个项目使用SQLite, 有一个名为Holidays的表,其中有一个数据类型为datetime的字段

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

SELECT HolidayDate
  FROM Holidays
 WHERE (HolidayDate >= '1/1/2011')
   AND (HolidayDate <= '1/1/2012')
选择HolidayDate
度假
其中(HolidayDate>=“2011年1月1日”)
上述查询中的(HolidayDate)符号工作正常


请帮助我。

sqlite中没有日期时间数据类型

Sqlite只有4种类型:

  • 整数
  • 浮点数
  • 字符串(存储为utf-8或utf-16并自动转换)
  • 斑点
此外,sqlite是清单类型的,这意味着任何列都可以保存任何类型的值。声明的类型仅用于两种用途:

  • 如果插入的值似乎是可转换的,则会将其转换为指定类型(并且它似乎根本不适用于使用
    sqlite\u bind\uu*
    方法绑定的值)
  • 它以某种方式提示索引器或优化器(我只知道当列未键入时,它在使用索引时遇到问题)
更糟糕的是,sqlite将默默地接受任何类型。如果它以“int”开头,它将解释为integeral类型;如果它包含“char”或“text”,它将解释为string;如果它是“real”、“double”或“number”,它将解释为浮点数;如果它是“blob”,它将解释为blob。在其他情况下,该列只是非类型化的,这对sqlite没有问题,因为类型化意味着什么

这意味着“2011年1月1日”只是一个字符串,当按基数排序时,格式为“mm/dd/yyyy”的日期和格式为“dd/mm/yyyyy”的日期都不会按日期排序(实际上是按基数排序)

如果您以ISO格式(“yyyy-mm-dd”)存储日期,则ASCIB电子排序将与日期排序兼容,您不会有任何问题。

请尝试:

SELECT HolidayDate
  FROM Holidays
 WHERE HolidayDate >= date('2011-01-01')
   AND HolidayDate <= date('2012-01-01')
选择HolidayDate
度假
其中HolidayDate>=日期('2011-01-01')

你说的“不工作”到底是什么意思。您是否收到错误?即使有满足上述条件的行,我也不会收到任何输出。没有错误。假日的定义是什么?表假日仅包含一列数据类型datetime。没有满足上述条件的行,因为唯一满足该条件的值是格式为“1/1/2”的行011something'和那些看起来不是有效日期。我正在以ISO格式存储日期。如何获取上述查询的输出。我可以使用>和<对于日期,使用
。Sqlite将它们作为字符串进行比较,但在ISO格式中,它与作为日期进行比较一致。只需确保您0-填充字段以进行修复d宽度,即始终使用
01
,而不仅仅是
1