我有一组记录,其中包含 Date1 列和 Date2 列。如果记录的 Date1 值小于特定日期,则该值将替换为该记录的 Date2 列中的值。 日期列的类型为日期。我正在尝试使用 CASE 语句,但由于某种原因我获得了所有记录的新值。
空值呢?
select case when date1 < date '2016-01-01' then date2 else date1 end as your_date
from your_table;
尝试这样的事情;
CASE
WHEN Date1 < @DateVariable
THEN Date2
ELSE Date1
END DateResult
假设您在变量中有特定日期,例如:
DELCARE particularDate DATE
SET particularDate = '6/10/2016'
你的桌子如下:
CREATE TABLE Tab(ID INT, Name NVARCHAR(100), Date1 DATE, Date2 DATE)
INSERT INTO Tab VALUES(1, 'A', '10/10/2016', '11/10/2016')
INSERT INTO Tab VALUES(2, 'B', '9/10/2016', '12/16/2016')
INSERT INTO Tab VALUES(3, 'C', '1/10/2016', '11/10/2016')
INSERT INTO Tab VALUES(4, 'D', '2/10/2016', '4/10/2016')
INSERT INTO Tab VALUES(5, 'E', '4/10/2016', '2/10/2016')
桌子看起来像这样:
ID Name Date1 Date2
1 A 2016-10-10 2016-11-10
2 B 2016-09-10 2016-12-16
3 C 2016-01-10 2016-11-10
4 D 2016-02-10 2016-04-10
5 E 2016-04-10 2016-02-10
然后您可以使用以下查询:
SELECT t.ID,
t.Name,
CASE
WHEN (t.Date1 < particularDate)
THEN t.Date2
ELSE t.Date1
END AS GreaterDate
FROM Tab t
这会给你以下结果:
ID Name GreaterDate
1 A 2016-10-10
2 B 2016-09-10
3 C 2016-11-10
4 D 2016-04-10
5 E 2016-02-10
如果您指定在
Date1
和特定日期相等的情况下应该发生什么,这将很有用。 然后您可以显式定义此条件的结果。你可以做这样的事情:
SELECT t.ID,
t.Name,
CASE
WHEN (t.Date1 < particularDate) THEN t.Date2
WHEN (t.Date1 > particularDate) THEN t.Date1
ELSE t.Date1 --when date1 and particularDate are equal
END AS GreaterDate
FROM Tab t
希望这有帮助!!!
更改会话设置 NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
选择 日期 1 时的情况 < TO_DATE('1900/01/02 00:00:00', 'YYYY/MM/DD HH24:MI:SS') THEN DATE2 ELSE DATE1 END AS DATE_OF_INTEREST FROM TABLE;