Sql 如何根据日期对列“日期”进行排序

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

以下是我的观点,应该以“每周假期”作为第一个订单 第二个是“年假”,第三个是“特殊假日”,然后根据“日期”列按日期顺序进行订购,即订购日期的方式为1月、2月、3月等

   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;