簡體   English   中英

oracle sql如何從varchar中分離年份和月份

[英]oracle sql how to get apart year and apart month from varchar

我有varchar列名Calc_code ,例如,此100201 ',前兩個字符是Year( 2010 ),第三個和第四個字符是month( 02 ),最后兩個字符與日期無關,因此它們並不重要。 我將如何轉換為日期,以便可以在where子句中選擇以下內容:


select *
from  table_a 
where Calc_code >= p_year_from || p_month_from 
 and  Calc_code <= p_year_to || p_month_to 

需要考慮前四位數字,然后我們可以使用TO_DATE對其進行轉換,如下所示:

select to_date(SUBSTR('100201',1,4),'YYMM') FROM DUAL;

請注意,輸出將是該月的第一個日期,因為該日期未在TO_DATE函數中給出

干杯!!

您需要前四個字符,並且可以使用substr()函數獲取它們:

select *
from  table_a 
where substr(Calc_code, 1, 4) >= p_year_from || p_month_from 
 and  substr(Calc_code, 1, 4) <= p_year_to || p_month_to

我假設p_year_fromp_month_fromp_year_top_month_to是字符串(因為您將它們連接在一起),必要時在其左側填充0

TO_DATE與值的前4個字符子字符串一起使用:

SELECT TO_DATE( SUBSTR( calc_code, 1, 4 ), 'RRMM' )
FROM   DUAL;

因此,假設您的p_year_from等值為數字,則代碼為:

SELECT *
FROM   table_a 
WHERE  TO_DATE( SUBSTR( calc_code, 1, 4 ), 'RRMM' )
       BETWEEN TO_DATE( TO_CHAR( p_year_from, '00' ) || TO_CHAR( p_month_from, '00' ), 'RRMM' )
       AND     TO_DATE( TO_CHAR( p_year_to,   '00' ) || TO_CHAR( p_month_to,   '00' ), 'RRMM' )
   with YR_FROM as (select to_char(to_date(SUBSTR('100201',1,4),'YYMM'), 'YYYY-MM') FROM DUAL),--2010 Feb
          YR_TO as (select to_char(to_date(SUBSTR('100301',1,4),'YYMM'), 'YYYY-MM') FROM DUAL) --2010 March
    Select * from  table_a
    where to_char(CREATE_DATE, 'YYYY-MM') between (select * from YR_FROM) and (select * from YR_TO);

    --Will give zero results
    with YR as (select to_char(to_date(SUBSTR('100201',1,4),'YYMM'), 'YYYY-MM') FROM DUAL)
    Select * from  table_a
    where to_char(CREATE_DATE, 'YYYY-MM') >= (select * from YR)
      and to_char(CREATE_DATE, 'YYYY-MM') <=(select * from YR);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM