【问题标题】:How to query SQLite data between start of month and today如何在月初和今天之间查询 SQLite 数据
【发布时间】:2016-03-16 20:22:11
【问题描述】:

我有一个包含 column_date 的表,其中日期保存为字符串 yyyy-mm-dd 我通过代码查询上周的情况

    String query = "select * from table_name where e_date  >= date('now','-7 days') order by e_date DESC";

它工作正常,但如果我使用了

    String query = "select * from expenses where e_date  >= date('now','-30 days') order by e_date DESC";

它给了我最后 30 天,但我需要的是从每月的第一天到现在的当前月份。 任何帮助表示赞赏和提前感谢。

【问题讨论】:

  • 只需传入当月当天的整数作为负值

标签: java android database sqlite android-sqlite


【解决方案1】:

SQLite date() 函数有start of monthlocaltime modifers,所以你可以简单地做

String query = "SELECT * FROM expenses WHERE e_date BETWEEN date('now','localtime','start of month') AND date('now','localtime') "

如果您想在 Java 中执行此操作,您可以使用 SimpleDateFormat 来获取今天和月初的 yyyy-MM-dd 字符串。

那么假设e_date是类型TEXT,你可以用字符串连接查询

String query = "SELECT * FROM expenses WHERE " + monthStart + " <= e_date AND e_date <= " + today;

或者,使用BETWEEN

String query = "SELECT * FROM expenses WHERE e_date BETWEEN " + monthStart + " AND " + today;

例如

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH, 1);
String monthStart = dateFormat.format(c.getTime());

c = Calendar.getInstance(); // reset
String today = dateFormat.format(c.getTime());

System.out.println(monthStart + " to " + today);

在 2016 年 3 月 16 日运行此程序将打印

2016-03-01 to 2016-03-16

【讨论】:

  • 今天要说String = "2016-03-16";和字符串monthstart =“2016-03-01”;
  • 为什么?如果我明天运行该代码,那么我不需要"2016-03-16",而是"2016-03-17"
  • 那么今天和monthstart如何获取String,你能告诉我吗?
  • 抱歉我才看到
  • 谢谢 cricket-007 这段代码运行良好 String query = "SELECT * FROM costs WHERE e_date between date('now','localtime','start of month') 和 date('now ','本地时间') " ;
【解决方案2】:

我之前用我的安卓应用试过,试试这个

final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
Calendar startCal = Calendar.getInstance();
startCal.set(Calendar.MONTH, month);
startCal.set(Calendar.DAY_OF_MONTH, 1);
Calendar endCal = Calendar.getInstance();
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM expenses  WHERE   date( e_date/1000,'unixepoch','localtime')   >= '" + (SDF.format(startCal.getTime())) + "'  And  date( e_date/1000,'unixepoch','localtime')   <= '" + (SDF.format(endCal.getTime())) + "'";
Cursor cursor = db.rawQuery(selectQuery, null);

【讨论】:

  • 不确定为什么需要转换为纪元时间
  • 只要将时间存储在数据库中以获取 yyyy-MM-dd hh:mm:ss 格式,您必须对其进行转换。
  • 啊,如果列类型是TEXT,可以直接比较
猜你喜欢
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
相关资源
最近更新 更多