Получение отформатированной строки в запросе Oracle Sql - PullRequest
2 голосов
/ 03 августа 2011

мой запрос выглядит примерно так

Select date_value from Tab1;

Вывод выглядит следующим образом (date_value - столбец Varchar2)

 2008-2009
 2009-2010
 2007-2009

Я пытаюсь выполнить какое-либо форматирование в столбце date_value,так что вывод выглядит следующим образом

 2008-09
 2009-10
 2007-09

Есть ли способ сделать это как часть вышеприведенного запроса, используя некоторые встроенные функции оракула Split / Join.Я изучал Instr и Substr, но я не уверен, как это сделать в этом запросе.

Ответы [ 2 ]

8 голосов
/ 03 августа 2011
SELECT SUBSTR(date_value,1,5) || SUBSTR(date_value,8,2) FROM tab1

Это должно работать в течение следующих ~ 8000 лет.

3 голосов
/ 03 августа 2011

Если вы делаете это в базе данных 10g, вы можете использовать Регулярные выражения .

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>

Конечно, здесь действует обычное предупреждение о регулярном выражении хотя у него есть одно явное преимущество: соответствие 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>
...