[英]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_from
, p_month_from
, p_year_to
和p_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.