在Oracle Sql查询中获取格式化字符串

时间:2011-08-03 16:22:12

标签: sql database oracle string-formatting

我的查询是这样的

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。

2 个答案:

答案 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>