sql - SQL 查询中日期的 Case When 语句
问题描述
我正在尝试修复我的 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,但不确定如何执行此操作
解决方案
首先,您的CASE
陈述看起来不正确。它应该类似于CASE WHEN condition THEN value ELSE value END
(请参阅SQLite 表达式)。
其次,由于SQLite 没有“日期”字段类型,您可能使用的是字符串,因此您需要将值转换为日期(请参阅SQLite 日期和时间函数):
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 Fiddle:http ://sqlfiddle.com/#!5/361ea/3/0
推荐阅读
- css - 在 smarty 上预加载字体并在 @font-face 上使用
- api - Grafana 如何从 IoT 平台读取数据
- php - 如何从 php 运行这个 powershell 文件
- android - 如何使Android中的XML设计视图显示准确的设计?
- quarkus - 在未安装 GraalVM 的情况下创建本机可执行文件
- xaml - 'System.Windows.Interactivity.EventTrigger' 必须将 IsFrozen 设置为 false 才能修改
- python - Django REST framework 节流类或中间件
- pytorch - RTX 3080 的分段错误(核心转储)
- object - 有谁知道为什么 TWEAK 例程在 BUILD 例程之前被击中?
- c++ - 将 QML 应用程序与 C++ 应用程序集成