2016-12-28 105 views
2

在Oracle SQL Developer中,根据我的日期列在2010年1月1日之前或之后是否有值,我如何在的列中添加在SQL中:根据之前或之后的日期添加列?

例如:

Date 
--------- 
01-JAN-10 
01-JUL-15 
07-JAN-07 

我想看看它是这样的:

Date  on_time 
-------------------- 
01-JAN-10  N 
01-JUL-15  Y 
07-JAN-07  N 

N表示值等于或在时间上迟:2010年1月1日

Y表示该值在2010年1月1日之前。

这甚至有可能吗?我以前没有在SQL中添加一个新列。

回答

3

您可以使用CASE语句是:

SELECT your_date, 
CASE WHEN your_date > '2010-01-01' THEN 'Y' ELSE 'N' END "on_time" 
FROM your_table 

检验该日期比2010-01-01大于它将打印Y否则将打印N

+1

Just要添加到这个答案,如果你想非常具体,你可以指定日期格式,以防NLS设置不符合你的期望; 'to_date('2010-01-01','YYYY-MM-DD')' –

+0

与Adam的回答不同,这仍然不能解决OP所要求的一半 - 他也问如何添加一列,而不仅仅是什么表达使用。 – mathguy

2

您可以使用基于Case声明在日期栏中。
例如:

CASE WHEN [your date column] > '01-JAN-10' THEN 'N' 
ELSE 'Y' 
END 

当然要确保你使用PL/SQL to_date函数的字符串转换

+0

'CASE'声明不起作用。 – BJones

+0

我在我的答案中有尖括号,并且发布引擎认为这是一个标签,并且没有正确显示我的答案。 – user7351608

+0

它仍然无法正常工作。 – BJones

1

您可以使用虚拟列:

alter table <table_name> 
add (<column_name> [<data_type>] [generated always] as (<column_expression>) [virtual]); 

的话,你可以使用case函数来生成你的列:

CASE WHEN Date > to_date('2010-01-01', 'yyyy-mm-dd') THEN 'Y' ELSE 'N' END 
+0

嗨@Adam Silenko,我是新来的 - 在我的查询中,我会添加'alter table'和'添加',然后再'CASE WHEN'?我的查询有SELECT,FROM,LEFT JOIN和WHERE语句。不确定这在哪里适合。 – WolverineTime

+0

您可以''将列添加到'table'中,然后在'SELECT'子句中像普通列一样使用它,或者直接在'SELECT'中使用这个表达式 –

相关问题