用CASE语句替换Date值

时间:2016-11-18 08:23:17

标签: sql oracle oracle11g oracle10g oracle-sqldeveloper

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

4 个答案:

答案 0 :(得分:0)

nulls怎么样?

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

答案 1 :(得分:0)

尝试这样的事情;

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

答案 2 :(得分: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

希望这有帮助!!!

答案 3 :(得分:0)

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

选择    案件在DATE1&lt; TO_DATE('1900/01/02 00:00:00','YYYY / MM / DD HH24:MI:SS')那么DATE2 ELSE DATE1结束为DATE_OF_INTEREST    FROM TABLE;