我有这个专栏
Date
-------
01-Jun-2005
06-Sep-2008
25-Dec-2010
30-Mar-2003
31-Aug-2001
17-Oct-2002
20-May-2007
15-Apr-2006
18-Feb-2007
16-Jan-2002
字符串
我想把这些
Spring dates - 20 march - 21 June
Summer dates 21 June - 22 september
Autumn dates 22 September - 22 December
Winter dates 22 December - 20 march
Date Season
------- -------
01-Jun-2005 Summer
06-Sep-2008 Spring
25-Dec-2010 Winter
30-Mar-2003 Spring
31-Aug-2001 Summer
17-Oct-2002 Autumn
20-May-2007 Summer
15-Apr-2006 Spring
18-Feb-2007 Winter
16-Jan-2002 Winter
型
查询:
SELECT Dates,
CASE WHEN Dates BETWEEN '22-Dec-%%' AND '20-Mar-%%' THEN 'Winter'
WHEN Dates BETWEEN '21-Mar-%%' AND '21-Jun-%%' THEN 'Spring'
WHEN Dates BETWEEN '22-Jun-%%' AND '22-Sep-%%' THEN 'Summer'
ELSE 'Winter' END AS Season
FROM T1
型
2条答案
按热度按时间cx6n0qe31#
CASE
表达式是一个选项,但是-使其有效。例如像这样(注意,我修改了季节日期,以便它们实际上代表我们在学校学到的东西)。样本数据:
字符串
查询:
型
v1l68za42#
一种可能性是规范化输入日期,使其始终是同一年。在这个例子中,我使用表达式
ADD_MONTHS(Dates, 12 * (2000 - EXTRACT(YEAR FROM Dates)))
将其始终设置为2000年:字符串
请注意,冬天跨越了两年,这会使我们与BETWEEN的比较失败。我通过处理ELSE案例中的冬天来避免这个困难。