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