Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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
Java SQLite中的更改排序_Java_Sql_Sqlite - Fatal编程技术网

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没有为存储的日期指定任何含义(它们只是文本、实数或整数列,具体取决于您使用的格式),我认为您无法以存储它们的方式轻松对它们进行排序。(也就是说,希望有人能证明我错了。)

因此,有两种可能的解决办法:

  • 将日期存储为时间戳。这些时间戳将始终正确排序

  • 使用函数动态创建时间戳列。您可以使用带有unixepoch修饰符的日期和时间函数创建别名,并基于此进行排序

  • 不幸的是,我目前无法访问sqlite来测试这些功能,但我认为它们应该是可靠的。(如果没有,肯定会有人纠正我。)

    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不像典型数据库那样使用严格的数据类型——他们认为这是一种“功能”: