【问题标题】:SQLite Convert String to Date in SQL StatementSQLite 在 SQL 语句中将字符串转换为日期
【发布时间】:2014-10-31 00:53:18
【问题描述】:

我在尝试编写 SQLite 语句以在今天的日期之前使用 where 子句获取特定列的总和时遇到一些问题:

SELECT SUM(amount) AS total, (substr(date, 7, 4) || '-' || substr(date, 4, 2) || '-' || substr(date, 1, 2)) AS Date FROM transactionRec 
WHERE type = 'W' AND Date BETWEEN DATE('now') AND DATE('now', '+1 day')

在进行比较之前,我正在尝试将我的日期列转换为正确的日期格式。我的模拟数据如下:

正确地,它应该返回我最后一行的记录,因为它是今天的日期,但不知何故,我使用上面的 SQL 语句得到了空结果。

有什么想法吗?提前致谢。

【问题讨论】:

  • 由于您的 Date 列是 TEXT 尝试 DATE(Date) BETWEEN ...
  • 不幸的是,它仍然返回空结果
  • 好的。再来一次尝试。 strftime('%d/%m/%Y', Date) BETWEEN ...
  • @PM77-1 我将我的 SQL 语句编辑为:SELECT SUM(amount) AS total, (substr(date, 7, 4) || '-' || substr(date, 4, 2 ) || '-' || substr(date, 1, 2)) AS Date FROM transactionRec WHERE type = 'W' AND strftime('%d/%m/%Y', Date) BETWEEN DATE(Date) AND DATE ('now', '+1 day') 但还是不行
  • AND strftime('%d/%m/%Y', Date) BETWEEN DATE('now') AND DATE('now', '+1 day') 如果您将示例数据粘贴为文本(不是图像),我将能够创建一个演示。

标签: sql database sqlite datetime select


【解决方案1】:

两个变化:

  1. 我按串联顺序交换了 monthday
  2. 我使用了SomeDate,而不是别名Date


SELECT SUM(amount) AS total, 
       (substr(date, 7, 4) || '-' || substr(date, 1, 2) || '-' || substr(date, 4, 2)) AS SomeDate 
FROM transactionRec 
WHERE type = 'W' AND SomeDate BETWEEN DATE('now') AND DATE('now', '+1 day')

显然SQLite 在区分date 字段和Date() 函数时没有问题,但在面对Date 列别名时会感到困惑。

【讨论】:

  • 但是你知道如何获得前一周、一个月和一年吗?
猜你喜欢
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 2021-12-25
  • 2015-08-23
  • 2013-07-12
相关资源
最近更新 更多