Sql 如何根据日期对列“日期”进行排序
以下是我的观点,应该以“每周假期”作为第一个订单 第二个是“年假”,第三个是“特殊假日”,然后根据“日期”列按日期顺序进行订购,即订购日期的方式为1月、2月、3月等Sql 如何根据日期对列“日期”进行排序,sql,oracle,Sql,Oracle,以下是我的观点,应该以“每周假期”作为第一个订单 第二个是“年假”,第三个是“特殊假日”,然后根据“日期”列按日期顺序进行订购,即订购日期的方式为1月、2月、3月等 Create or Replace view VW_TBL_HOILDAY_APLICATION as SELECT DISTINCT CASE A.DESCRIPTION WHEN 'Weekly holiday' THEN TO_CHAR(A.H
Create or Replace view VW_TBL_HOILDAY_APLICATION as
SELECT DISTINCT
CASE A.DESCRIPTION
WHEN 'Weekly holiday'
THEN TO_CHAR(A.Holiday_date,'FMDAY')
WHEN 'Annual holiday'
THEN TO_CHAR(A.holiday_date,'dd-MON')
WHEN 'Special_Date_Holiday'
THEN TO_CHAR(A.holiday_date,'dd-MON-yy')
END AS Dates,
A.DESCRIPTION
FROM tbl_holiday_master A
where A.description in('Weekly holiday','Annual holiday','Special_Date_Holiday')
order by CASE A.DESCRIPTION
WHEN 'Weekly holiday'
THEN '1'
WHEN 'Annual holiday'
THEN '2'
WHEN 'Special_Date_Holiday'
THEN '3'
END ASC, Dates ASC;
但我的输出是这样的::
DATES DESCRIPTION
--------------------------
SUNDAY Weekly holiday
02-OCT Annual holiday
15-AUG Annual holiday
26-JAN Annual holiday
11-NOV-15 Special_Date_Holiday
25-DEC-15 Special_Date_Holiday
25-JAN-15 Special_Date_Holiday
备注:-视图中我的列dates的数据类型是varchar,因为其中包含星期日,并根据字符串进行排序。
谢谢 问题在于您正在将日期转换为字符串: 不要在视图中这样做,但只要您想在查询视图时显示日期,就可以这样做 将视图创建为: 然后在查询视图时对日期进行格式化和排序: 或者,如果您想保持原始视图,那么唯一的方法是将实际日期列添加到选择列表中,并在ORDERBY子句中使用它
请记住,单个SQL级别的ORDER BY子句始终优先于您在“创建”视图中提到的排序。使用ORDER BY A.HOLDAY\u date,它将按实际日期值而不是字符串进行排序。@A\U horse\U和\U no\U名称表示它不是选定的表达式。谢谢lalit,您的答案是“砰”的一声,看起来是剩下的唯一方法,因为我无法选择假日日期。@VishalTyagi通常我不喜欢在视图中排序,我总是将其保留在sql级别。不管怎样,希望它解决了你的问题。请将其标记为已回答,这样也会帮助他人!我确实尝试过你的方法,但在addin order by holiday_date从视图中选择时,它显示的不是选定的表达式。@VishalTyagi这是一个愚蠢的拼写错误,我修复了它。请立即尝试抱歉,它不起作用,在“假日日期”处显示无效标识符。
CASE A.DESCRIPTION
WHEN 'Weekly holiday'
THEN TO_CHAR(A.Holiday_date,'FMDAY')
WHEN 'Annual holiday'
THEN TO_CHAR(A.holiday_date,'dd-MON')
WHEN 'Special_Date_Holiday'
THEN TO_CHAR(A.holiday_date,'dd-MON-yy')
END
CREATE OR REPLACE VIEW VW_TBL_HOILDAY_APLICATION
AS
SELECT DISTINCT A.holiday_date AS holiday_date,
A.DESCRIPTION
FROM tbl_holiday_master A
WHERE A.description IN('Weekly holiday',
'Annual holiday',
'Special_Date_Holiday');
SELECT
CASE DESCRIPTION
WHEN 'Weekly holiday'
THEN TO_CHAR(holiday_date,'FMDAY')
WHEN 'Annual holiday'
THEN TO_CHAR(holiday_date,'dd-MON')
WHEN 'Special_Date_Holiday'
THEN TO_CHAR(holiday_date,'dd-MON-yy')
END AS Dates,
FROM VW_TBL_HOILDAY_APLICATION
ORDER BY holiday_date;
CREATE OR REPLACE VIEW VW_TBL_HOILDAY_APLICATION
AS
SELECT DISTINCT
CASE A.DESCRIPTION
WHEN 'Weekly holiday'
THEN TO_CHAR(A.Holiday_date,'FMDAY')
WHEN 'Annual holiday'
THEN TO_CHAR(A.holiday_date,'dd-MON')
WHEN 'Special_Date_Holiday'
THEN TO_CHAR(A.holiday_date,'dd-MON-yy')
END AS Dates,
A.DESCRIPTION,
A.holiday_date holiday_date
FROM tbl_holiday_master A
WHERE A.description IN('Weekly holiday','Annual holiday','Special_Date_Holiday')
ORDER BY
CASE A.DESCRIPTION
WHEN 'Weekly holiday'
THEN '1'
WHEN 'Annual holiday'
THEN '2'
WHEN 'Special_Date_Holiday'
THEN '3'
END ASC,
holiday_date;