用CASE语句替换日期值

gopyfrb3  于 2022-10-04  发布在  Oracle
关注(0)|答案(4)|浏览(137)

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

zphenhs4

zphenhs41#

那么空值呢?

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

idv4meu82#

试着做这样的事情;

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

lh80um4z3#

假设您在一个变量中包含该特定日期,例如:

DELCARE particularDate DATE
SET particularDate = '6/10/2016'

您的table如下所示:

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

希望这能有所帮助!

mhd8tkvw

mhd8tkvw4#

ALTER SESSION SET NLS_DATE_FORMAT=‘DD-MON-YYYY HH24:MI:SS’;

SELECT CASE WHEN DATE 1<To_Date(‘1900/01/02 00:00:00’,‘YYYY/MM/DD HH24:MI:SS’)则DATE2否则Date1将作为表中的Date_of_Interest结束;

相关问题