Java SQLite中的更改排序
我的日期以以下格式存储:Java SQLite中的更改排序,java,sql,sqlite,Java,Sql,Sqlite,我的日期以以下格式存储: 3-1-2011 3-15-2011 然而,它似乎是这样分类的: 3-1-2011 3-10-2011 ... 3-19-2011 3-2-2011 3-20-2011 ... 3-29-2011 3-3-2011 3-30-2011 因此,当我尝试使用WHERE date从2011年3月1日到2011年3月3日提取数据时,它似乎会返回从3月1日到3月29日的所有结果。在不更改所有值的情况下,是否可以修复此问题?您的数据不会按日期排序,因为您没有将其存储为SQLit
3-1-2011
3-15-2011
然而,它似乎是这样分类的:
3-1-2011
3-10-2011
...
3-19-2011
3-2-2011
3-20-2011
...
3-29-2011
3-3-2011
3-30-2011
因此,当我尝试使用WHERE date从2011年3月1日到2011年3月3日提取数据时,它似乎会返回从3月1日到3月29日的所有结果。在不更改所有值的情况下,是否可以修复此问题?您的数据不会按日期排序,因为您没有将其存储为SQLite支持的格式: YYYY-MM-DD HH:MM:SS.SSS
有关详细信息,请参见。由于SQLite没有为存储的日期指定任何含义(它们只是文本、实数或整数列,具体取决于您使用的格式),我认为您无法以存储它们的方式轻松对它们进行排序。(也就是说,希望有人能证明我错了。) 因此,有两种可能的解决办法:
create table t(dt datetime)
create table t(dt int)
create table t(dt)
它们都创建了一个能够存储任何数据的列dt
下面的case语句可用于将您的[m]m-[d]d-[yy]yy
数据转换为实际日期,然后您可以将其更新回表(以标准化)或用于排序
select dt, date(
case when dt like '%-%-__' then substr(dt,-2)
when dt like '%-%-____' then substr(dt,-4) end
|| '-' ||
case when dt like '_-%' then '0' || substr(dt,1,1)
when dt like '__-%' then substr(dt,1,2) end
|| '-' ||
case when dt like '__-_-%' then '0' || substr(dt,4,1)
when dt like '__-__-%' then substr(dt,4,2)
when dt like '_-_-%' then '0' || substr(dt,3,1)
when dt like '_-__-%' then substr(dt,3,2) end)
from t
order by 2
日期字段的数据类型是什么?@Simon:SQLite不像典型数据库那样使用严格的数据类型——他们认为这是一种“功能”: