【问题标题】:Extract month and year from date in oracle从oracle中的日期提取月份和年份
【发布时间】:2018-02-16 02:58:22
【问题描述】:

从完整日期中提取月份和年份的查询是什么。 我的数据是这样的:1/29/2008 我试过这个查询:

select ID_NO, CHECKED_DATE, to_date(TO_CHAR(CHECKED_DATE, 'MON-YYYY'), 'MON-YYYY') AS A 
from Doctor_Checkup;

但它会给出输出:1/1/2008

预计产出:1-2008

【问题讨论】:

  • 我想你想要这个to_char(checked_date,'mm-yyyy') as a

标签: sql oracle


【解决方案1】:

要获得1-2008 格式,请使用以下格式并修剪前导零:

select ID_NO,CHECKED_DATE,ltrim(TO_CHAR(CHECKED_DATE,'MM-YYYY'),'0') AS A from Doctor_Checkup; 

【讨论】:

    【解决方案2】:

    如果该字段已经是日期列,您可以简单地将其转换为您想要的格式:

    select ID_NO,CHECKED_DATE,ltrim(TO_CHAR(CHECKED_DATE,'mm-yyyy'),'0') AS A from Doctor_Checkup;
    

    如果是文本列,则需要先转换为带格式的日期:

    select ID_NO,CHECKED_DATE,ltrim(TO_CHAR(TO_DATE(CHECKED_DATE,'dd/mm/yyyy'),'mm-yyyy'),'0') AS A from Doctor_Checkup;
    

    【讨论】:

      【解决方案3】:

      日期没有格式 - 它是 stored internally to the database 为 7 字节(表示年、月、日、小时、分钟和秒),直到您使用的任何用户界面(即 SQL/Plus 、SQL Developer、Java 等)尝试将其显示给您,即用户,并将其转换为您认为有意义的内容(通常是字符串),日期具有格式。

      需要注意的一点是,日期总是包含年、月、日、小时、分钟和秒的组成部分。正在做:

      to_date(TO_CHAR(CHECKED_DATE, 'MON-YYYY'), 'MON-YYYY')
      

      实际上和做的一样:

      TRUNC( Checked_Date, 'MM' )
      

      并且仍然会有天、小时、分钟和秒的组成部分,但会被截断到该月第一天的午夜。用户界面可能只是将其首选项设置为不显示时间组件(但日期仍然有)。

      您要做的是将日期转换为格式化字符串:

      select ID_NO,
             CHECKED_DATE,
             TRIM( LEADING '0' FROM TO_CHAR( CHECKED_DATE, 'MM-YYYY') ) AS A 
      from   Doctor_Checkup;
      

      select ID_NO,
             CHECKED_DATE,
             EXTRACT( MONTH FROM CHECKED_DATE )
               || '-' || EXTRACT( YEAR FROM CHECKED_DATE ) AS A 
      from   Doctor_Checkup;
      

      【讨论】:

      • 和我的完全一样的解决方案,但是快了两分钟,并且对日期和格式有很好的解释。干得好。
      【解决方案4】:

      您需要一个以 [M]M-YYYY 格式表示月份和年份的字符串。不过,Oracle 的 TO_CHAR 仅支持 MM-YYYY,因此您必须去掉前导零(如果有)。

      两种解决方案:

      trim(leading '0' from to_char(checked_date, 'mm-yyyy'))
      

      extract(month from checked_date) || '-' || extract(year from checked_date) from dual
      

      【讨论】:

        【解决方案5】:

        SELECT ID_NO, CHECKED_DATE FROM DOCTOR_CHECKUP EXTRACT(MONTH FROM CHECKED_DATE) IN (6) 和 EXTRACT(YEAR FROM CHECKED_DATE) IN (2019);

        6 表示月份,2019 年表示年份

        【讨论】:

          【解决方案6】:
          LTRIM(TO_CHAR(TO_DATE(<date_field>,'YYYYMMDD'),'YYYY-MM'),'09'))
          

          【讨论】:

            猜你喜欢
            • 2021-10-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-02
            • 1970-01-01
            相关资源
            最近更新 更多