SQLite 查询相关范围内的日期

Posted

技术标签:

【中文标题】SQLite 查询相关范围内的日期【英文标题】:SQLite querying dates within a relevant range 【发布时间】:2020-06-14 16:40:00 【问题描述】:

我正在使用 android studio 和 SQLite。我在 SQLite 中设置了我的处方表,并为我的开始日期和结束日期使用了 TEXT 类型。在查询此数据时,我不太确定 TEXT 是否是合适的数据类型。我想显示开始日期早于或等于当前日期且结束日期大于或等于当前日期的记录。下面的代码来自我的 DatabaseHelper.java 类;

 //Create prescription table
    public static final String TABLE_PRESCRIPTION = "prescription_table";
    public static final String COL_PRESCRIPTION_ID = "PRESCRIPTIONID";
    public static final String COL_PRESCRIPTION__PATIENTID = COL_PATIENT_PATIENTID;
    public static final String COL_PRESCRIPTION__DATE = "DATE";
    public static final String COL_PRESCRIPTION__DRUGNAME = "DRUGNAME";
    public static final String COL_PRESCRIPTION__CONCENTRATION = "CONCENTRATION";
    public static final String COL_PRESCRIPTION__DOSAGE = "DOSAGE";
    public static final String COL_PRESCRIPTION__PREPARATION = "PREPARATION";
    public static final String COL_PRESCRIPTION__STARTDATE = "STARTDATE";
    public static final String COL_PRESCRIPTION__ENDDATE = "ENDDATE";
    public static final String COL_PRESCRIPTION__DOCTORID = "DOCTORID";

public void onCreate (SQLiteDatabase db) 
 String prescriptiontable = "CREATE TABLE " + TABLE_PRESCRIPTION + "(PRESCRIPTIONID INTEGER PRIMARY KEY AUTOINCREMENT, PATIENTID INTEGER, DATE TEXT, DRUGNAME TEXT, CONCENTRATION TEXT, DOSAGE TEXT, PREPARATION TEXT, STARTDATE TEXT, ENDDATE TEXT, DOCTORID INTEGER)";
        //execute SQL statements
        db.execSQL(prescriptiontable);


 public Cursor getPrescriptionsPerPatient(String patientid)
        SQLiteDatabase db = this.getReadableDatabase();
        //SQL select statement
        Cursor data = db.rawQuery("SELECT * FROM prescription_table WHERE PATIENTID =? AND strftime('%d/%m/%Y',date('now') BETWEEN " +
                        "STARTDATE AND ENDDATE)",
                new String[]patientid);
        return data;
    

错误在 getPrescriptionsPerPatient() 方法中。任何帮助,将不胜感激!谢谢

【问题讨论】:

如果你想比较除相等之外的任何日期,你需要使用一种可以有意义地排序的格式,就像 sqlite 日期和时间函数所接受的格式。 你还需要修复你的语法错误。 @Shawn 哪个语法错误? @Niamh:date('now') 后缺少右括号 【参考方案1】:

假设您将日期存储在 one of the formats supported by SQLite(通常为:YYYY-MM-DD)中,您可以这样做:

SELECT * 
FROM prescription_table 
WHERE 
    patientid = ? 
    AND date('now') BETWEEN startdate AND enddate

【讨论】:

以上是关于SQLite 查询相关范围内的日期的主要内容,如果未能解决你的问题,请参考以下文章

Sqlite,使用分组?对于具有日期范围的子查询

在 SQLite 中获取日期范围之间的数据

如何在 SQLite 表中插入日期和查询日期

android SQLite中数据库查询,如何查询一段时间内的记录

如何在 Sqlite 中使用时间序列,以及快速的时间范围查询?

如何从 SQLite 数据库中的用户位置检索特定范围内的一组位置