我的查询是这样的
Select date_value from Tab1;
输出看起来像这样(date_value是一个Varchar2列)
2008-2009
2009-2010
2007-2009
我正在尝试对date_value列进行一些格式化,以便输出看起来像这样
2008-09
2009-10
2007-09
有没有办法使用一些Split / Join内置的oracle函数作为上述查询的一部分。我正在探索关于Instr和Substr,但我不确定如何在该查询中执行此jsut。
答案 0 :(得分:8)
SELECT SUBSTR(date_value,1,5) || SUBSTR(date_value,8,2) FROM tab1
这应该适用于下一个〜8000年。
答案 1 :(得分:3)
如果您在10g数据库上执行此操作,则可以使用Regular Expressions。
SQL> select dcol
2 , regexp_replace(dcol
3 , '([[:digit:]]+)\-([[:digit:]]{2})([[:digit:]]{2})'
4 , '\1-\3') as regexp_replace
5 from t79
6 /
DCOL REGEXP_REPLACE
------------------------------ ------------------------------
2008-2009 2008-09
2009-2010 2009-10
2007-2009 2007-09
SQL>
当然,the usual caveat about regex适用于此,虽然它确实有一个明显的优势:符合Y10K:)
SQL> select dcol
2 , regexp_replace(dcol
3 , '([[:digit:]]+)\-([[:digit:]]+)([[:digit:]]{2})'
4 , '\1-\3') as regexp_replace
5 from t79
6 /
DCOL REGEXP_REPLACE
------------------------------ ------------------------------
2008-2009 2008-09
2009-2010 2009-10
2007-2009 2007-09
10199-10200 10199-00
887-888 887-88
SQL>