【问题标题】:How to select rows from SQLite table which fall between today's date and 7 days time如何从 SQLite 表中选择介于今天日期和 7 天时间之间的行
【发布时间】:2015-08-19 11:27:02
【问题描述】:

public class DbHelper extends SQLiteOpenHelper {
  
    private static final String DATABASE_NAME = "assignment_info.db";

    public static final String ASSIGNMENT_ID  = "_id";
    public static final String ASSIGNMENT_VALUE = "assignment_value";
    public static final String ASSIGNMENT_RESULT = "assignment_result";
    public static final String SUBJECT = "subject";
    public static final String ASSIGNMENT_TITLE = "assignment_title";
    public static final String DUE_DATE = "due_date";
    public static final String NOTES_ASSIGNMENT = "notes";
    public static final String TABLE_NAME_ASSIGNMENT = "assignment_information";

    private static final String ADD_QUERY = "CREATE TABLE "+
            TABLE_NAME_ASSIGNMENT+"("+
            ASSIGNMENT_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+
            SUBJECT+" TEXT,"+
            ASSIGNMENT_VALUE+" INTEGER,"+
            ASSIGNMENT_RESULT+" DOUBLE,"+
            ASSIGNMENT_TITLE+" TEXT,"+
            DUE_DATE+" DATE,"+
            NOTES_ASSIGNMENT+" TEXT);";


    public DbHelper(Context context){

        super(context,DATABASE_NAME,null,DATABASE_VERSION);
        Log.e("Database Operations","Database opened/created from constructor.");
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //IF DATABASE IS CREATED FOR FIRST TIME THIS METHOD WILL BE CALLED
        db.execSQL(ADD_QUERY);
        db.execSQL(ADD_NOTES_QUERY);
        Log.e("Database Operations"," DbHelper - onCreate called ");

    }

我有一个 SQLite 表,其中包含存储为字符串的日期 >>
"+ DUE_DATE+" STRING," .

我想选择从今天到 7 天之间的所有行。

这是我目前所拥有的,它不会返回任何结果,

    String sql = "SELECT * FROM " + TABLE_NAME_ASSIGNMENT + " WHERE "+ DUE_DATE + " >= date('now') AND date('now','+7 days')";

有人可以帮忙吗? 谢谢

创建表 TABLE_NAME_ASSIGNMENT (ASSIGNMENT_IDINT,SUBJECTTEXT,ASSIGNMENT_TITLETEXT,DUE_DATEDATE) ;

插入 TABLE_NAME_ASSIGNMENT (ASSIGNMENT_ID, SUBJECT, ASSIGNMENT_TITLE, DUE_DATE) 价值观 (1,'数学','质数','2015-08-22'), (2, '科学', '元素周期表', '2015-08-30'), (3,'数学','奇数','2015-09-02') ;


选择 *

来自 TABLE_NAME_ASSIGNMENT

WHERE Due_Date BETWEEN date('now') AND date('now','+7 days')


您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 10 行的 ''+7 days')' 附近使用正确的语法

【问题讨论】:

  • 如果due_date 是表中的一列,为什么要使用连接?查询不应该是:WHERE DUE_DATE >= date('now') ...
  • 应该是:String sql = "SELECT * FROM " + TABLE_NAME_ASSIGNMENT + " WHERE Due_Date BETWEEN date('now') AND date('now','+7 days')"
  • String sql = "SELECT * FROM " + TABLE_NAME_ASSIGNMENT + " WHERE "+ DUE_DATE + " BETWEEN date('now') AND date('now','+7 days')";光标 mycursor = sqLiteDatabase.rawQuery(sql, null);返回我的光标;将其用作原始查询
  • 恐怕这也不起作用弗兰克,日期列应该存储为日期还是字符串?
  • 文本。格式为:YYYY-MM-DD

标签: sql sqlite


【解决方案1】:

您是否尝试过使用 BETWEEN?

String sql = "SELECT * FROM " + TABLE_NAME_ASSIGNMENT + " WHERE "+ DUE_DATE + " BETWEEN date('now') AND date('now','+7 days')"

还要确保 DUE_DATE 是 YYYY-MM-DD 形式的 DATE 类型

【讨论】:

  • 是的,也试过了,也没有得到任何结果,真的不明白为什么它不起作用
  • 你能用一些示例数据做一个 SQLfiddle (sqlfiddle.com) 并在此处发布吗?
  • 第一次使用 SQL Fiddle,好用的应用程序。显示语法错误?
  • 表示你的create table语句有错误。如果您使用它的文本到 DDL 功能,您只需将数据放入其中,它将转换为为您创建和插入语句,您可以将其保存为会话并在此处发布:)
  • 不太清楚如何使用它?不敢相信我不能得到这么简单的工作:(
【解决方案2】:

在您的表中,您将日期存储为字符串类型,因此您无法以传统方式检索数据,除非您在执行查询时将日期字符串转换为实际日期格式。 请使用以下查询再试一次。

SELECT 
 * 
FROM 
 Mytable 
WHERE 
 DATE(substr(fecha ,1,4) ||substr(fecha ,6,2)||substr(fecha ,9,2))
BETWEEN 
 DATE(20140105) 
AND 
 DATE(20140105);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-25
    • 2014-09-24
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 2017-08-14
    • 2015-10-28
    • 1970-01-01
    相关资源
    最近更新 更多