SQL查询中日期的情况时

时间:2018-07-09 16:55:13

标签: sql db-browser-sqlite

我正在尝试修复SQL表中的某些日期。就上下文而言,我将“交易明细”和“交易明细2”这两个表结合在一起。 “交易详细信息2”中的一列是“ START_DATE”,其日期可以追溯到2000年代初,格式为2010-05-08。我希望在2018年6月22日之前的每个START_DATE进入2018年6月22日。目前,我的代码如下:

SELECT "Trade Details 2".Portfolio, 
"Trade Details 2".CONTRACT_ID, 
DATE("Trade Details 2".START_DATE) as START_DATE, 
DATE(substr("Trade Details 2".MATURITY_DATE, 0, 5) || '-' || substr("Trade 
Details 2".MATURITY_DATE, 5,2) || '-' ||    substr("Trade Details 
2".MATURITY_DATE, 7, 9)) as MATURITY_DATE, 
"Trade Details 2".NOTIONAL1,
"Trade Details 2".CONTRACT_NPV,
"Trade Details".TERM
FROM "Trade Details 2" 
JOIN "Trade Details" 
WHERE "Trade Details 2".CONTRACT_ID="Trade Details".FCC_ID and
("Trade Details 2".NOTIONAL1 > "0.0") and
("Trade Details 2".MATURITY_DATE > DATE(substr('20180602', 0, 5) || '-' || 
substr('20180602', 5,2) || '-' ||    substr('20180602', 7, 9)) )
ORDER BY CONTRACT_ID asc

我认为我需要的是CASE WHEN语句,在其中我说类似以下内容:

  CASE WHEN "Trade Details 2".START_DATE<2018-06-22 THEN =2018-06-22

但是,当我尝试这样做时,我遇到了一个错误,并且我猜想这行代码的某些部分是错误的。但是,由于这是一个日期,因此我不知道大于/小于符号是否足够,而且我不确定该声明放在何处,即使该声明是完全正确的。但是,这是我的问题的要点。我相信这与这里的其他问题不同,因为它处理的是日期而不是简单的数字。

TLDR;试图将2018-06-22之前的日期转换为2018-06-22,但不确定如何执行

1 个答案:

答案 0 :(得分:0)

首先,您的CASE语句看起来不正确。 它应该类似于CASE WHEN condition THEN value ELSE value END(请参阅SQLite Expressions)。

第二,因为SQLite does not have a "date" field type,您可能正在使用字符串,所以您需要将值转换为日期(请参见SQLite Date And Time Functions):

date(start_date)

例如,考虑以下简化数据:

CREATE TABLE IF NOT EXISTS `trade_details` (
    `id` INTEGER,
    `start_date` TEXT,
    PRIMARY KEY(`id`)
);
INSERT INTO `trade_details` VALUES
    (1,'2018-06-01'),
    (2,'2018-06-22'),
    (3,'2018-06-23');

以下查询应该起作用:

SELECT
    id,
    start_date,
    CASE
        WHEN date(start_date) < date('2018-06-22')
        THEN '2018-06-22'
        ELSE start_date
    END AS modified_date
FROM trade_details;

结果:

+----+------------+---------------+
| id | start_date | modified_date |
+----+------------+---------------+
|  1 | 2018-06-01 | 2018-06-22    |
|  2 | 2018-06-22 | 2018-06-22    |
|  3 | 2018-06-23 | 2018-06-23    |
+----+------------+---------------+

您还可以尝试使用此SQL小提琴:http://sqlfiddle.com/#!5/361ea/3/0