用 CASE 语句替换日期值

问题描述 投票:0回答:4

我有一组记录,其中包含 Date1 列和 Date2 列。如果记录的 Date1 值小于特定日期,则该值将替换为该记录的 Date2 列中的值。 日期列的类型为日期。我正在尝试使用 CASE 语句,但由于某种原因我获得了所有记录的新值。

sql oracle oracle11g oracle10g oracle-sqldeveloper
4个回答
0
投票

空值呢?

select case when date1 < date '2016-01-01' then date2 else date1 end as your_date
  from your_table;

0
投票

尝试这样的事情;

CASE
    WHEN Date1 < @DateVariable
        THEN Date2
    ELSE Date1
END DateResult

0
投票

假设您在变量中有特定日期,例如:

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

希望这有帮助!!!


0
投票

更改会话设置 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;

© www.soinside.com 2019 - 2024. All rights reserved.