sqlite Date Sorting

前端 未结 4 795
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-24 17:32

I am a parsing a file into a sqlite database that contains dates in the YYYY-MM-DD format. I want to store the entries into sqlite in such a way that I can sort the entries by d

4条回答
  •  南方客
    南方客 (楼主)
    2021-01-24 18:12

    SQLite supports "DATE" in table creation. (More about that later.)

    CREATE TABLE test (dt DATE PRIMARY KEY);
    INSERT INTO "test" VALUES('2012-01-01');
    INSERT INTO "test" VALUES('2012-01-02');
    INSERT INTO "test" VALUES('2012-01-03');
    
    SELECT dt FROM test ORDER BY dt;
    2012-01-01
    2012-01-02
    2012-01-03
    

    Values in the form yyyy-mm-dd sort correctly as either a string or a date. That's one reason yyyy-mm-dd is an international standard.

    But SQLite doesn't use data types in the way most database workers expect it. Data storage is based on storage classes instead. For example, SQLite allows this.

    INSERT INTO test VALUES ('Oh, bugger.');
    SELECT * FROM test ORDER BY dt;
    2012-01-01
    2012-01-02
    2012-01-03
    Oh, bugger.
    

    It also allows different date "formats" (actually, values) in a single column. Its behavior is quite unlike standard SQL engines.

    INSERT INTO test VALUES ('01/02/2012');
    SELECT * FROM test ORDER BY dt;
    01/02/2012
    2012-01-01
    2012-01-02
    2012-01-03
    Oh, bugger.
    

    You don't have to do anything special to store a timestamp in a date column. (Although I'd rather see you declare the column as timestamp, myself.)

    INSERT INTO test VALUES ('2012-01-01 11:00:00');
    SELECT * FROM test ORDER BY dt;
    2012-01-01
    2012-01-01 11:00:00
    2012-01-02
    2012-01-03
    Oh, bugger.
    

    SQLite will try to do the Right Thing as long as you feed consistent data into it. And it will sort dates correctly if you use the standard format.

提交回复
热议问题