我有一组记录,其中包含一个Date1列和一个Date2列。如果记录的Date1值小于特定日期,则该值将替换为该记录的Date2列中的值。Date列的类型为Date。我试图使用CASE语句,但出于某种原因,我获得了所有记录的新值。
zphenhs41#
那么空值呢?
select case when date1 < date '2016-01-01' then date2 else date1 end as your_date from your_table;
idv4meu82#
试着做这样的事情;
CASE WHEN Date1 < @DateVariable THEN Date2 ELSE Date1 END DateResult
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和该特定日期相同的情况下应该发生什么,这将非常有用。**然后您可以显式定义此条件的结果。您可以这样做:
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
希望这能有所帮助!
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结束;
4条答案
按热度按时间zphenhs41#
那么空值呢?
idv4meu82#
试着做这样的事情;
lh80um4z3#
假设您在一个变量中包含该特定日期,例如:
您的table如下所示:
该表将如下所示:
然后,您可以使用以下查询:
这将为您提供以下结果:
**如果您指定在
Date1
和该特定日期相同的情况下应该发生什么,这将非常有用。**然后您可以显式定义此条件的结果。您可以这样做:希望这能有所帮助!
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结束;