SQLite中具有唯一格式的日期时间比较

时间:2018-11-30 18:45:40

标签: android sqlite

我有一个要求,其中必须将具有日期时间信息的列与当前日期和时间进行比较。如果更早,则必须删除此特定记录。 我已经完成了下面的实现,但是没有收到任何错误,也没有达到预期的行为。

SimpleDateFormat dateFormat = new SimpleDateFormat("dd MMM yyyy HH:mm", Locale.getDefault());
        Calendar nowCalendar = Calendar.getInstance();
        String strNowTime = dateFormat.format(nowCalendar.getTime());

        // Delete the records at Manager_Dashboard SQLiteDB
        String whereClause = "DATETIME(End_Time) < DATETIME(?)";
        String whereArgs[] = {strNowTime};

        dbOfflineRange.delete("Offline_Range",whereClause,whereArgs);

您可能会注意到,如果我在SQLite表中的文本中有一个End_Time记录(如30 Nov 2018 21:35),则应将其与当前日期时间(如30 Nov 2018 23:35)进行比较

由于End_Time早于Now,我希望将其删除。但是它没有发生。

1 个答案:

答案 0 :(得分:0)

日期和时间SQL函数要求日期采用可识别的格式。

  

时间字符串时间字符串可以采用以下任何格式:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD
     

SQL As Understood By SQLite - Date And Time Functions

您最好(最简单)的选择是将它们存储为YYYY-MM-DD HH:MM(即,相应地更改SimpleDateFormat)。

  • 请注意,您甚至不需要datetime函数,因为直接比较这些值将获得所需的结果。

  • 存储unix时间戳值将是更有效的存储/处理时间。

然后您可以使用strftime函数以所需的格式返回日期。

否则,您可以使用诸如substr之类的SQL函数将存储值转换为可识别的格式,然后进行比较。 SQL As Understood By SQLite - Core Functions

这是如何处理以DD MMM YYYY HH:MM格式存储的数据的示例 假设要比较的值以YYYYMMDDHH:MM格式提供:-

DROP TABLE IF EXISTS Offline_Range;
CREATE TABLE IF NOT EXISTS Offline_Range (end_time);

-- Add some test data dd MMM yyyy HH:mm
INSERT INTO Offline_Range VALUES
    ('21 May 2018 10:30'),
    ('21 Jun 2018 10:30'),
    ('21 Jul 2018 10:30'),
    ('21 Aug 2018 10:30')
;
SELECT * FROM Offline_Range
    WHERE
        substr(end_time,8,4)||
        CASE
            WHEN instr(end_time,'Jan') THEN '01'
            WHEN instr(end_time,'Feb') THEN '02'
            WHEN instr(end_time,'Mar') THEN '03'
            WHEN instr(end_time,'Apr') THEN '04'
            WHEN instr(end_time,'May') THEN '05'
            WHEN instr(end_time,'Jun') THEN '06'
            WHEN instr(end_time,'Jul') THEN '07'
            WHEN instr(end_time,'Aug') THEN '08'
            WHEN instr(end_time,'Sep') THEN '09'
            WHEN instr(end_time,'Oct') THEN '10'
            WHEN instr(end_time,'Nov') THEN '11'
            WHEN instr(end_time,'Dec') THEN '12'
        END
        ||
        substr(end_time,1,2)||substr(14,5) 

            <  

        '2018062200:00' -- 22 Jun 2018 00:00 amended to suit i.e. the value input

这将创建一个表:-

enter image description here

查询的结果将是:-

enter image description here

相关问题