Если вы хотите преобразовать много строк четверти, вы можете создать таблицу ссылок для JOIN в.
Скрипка SQL
Создатьданные теста :
CREATE TABLE src (qtrDate varchar(20));
INSERT INTO src (qtrDate)
SELECT '2011 -Q4' FROM dual UNION ALL
SELECT '2010 -Q3' FROM dual UNION ALL
SELECT '2011 -Q1' FROM dual UNION ALL
SELECT '2012 -Q1' FROM dual
;
Создание справочной таблицы и данных :
CREATE TABLE ref_quarters ( qtrString varchar(20), qtrEnd date, qtrBegin date ) ;
INSERT INTO ref_quarters ( qtrString, qtrEnd, qtrBegin )
SELECT to_char( dt, 'yyyy -"Q"q' )
, dt
, trunc(add_months(dt,-2),'mm')
FROM (
SELECT add_months( '31-DEC-2009', rownum*3) dt
FROM all_objects
WHERE rownum <= 20 /* 20 Quarters since 2010 Q1 */
)
ПРИМЕЧАНИЕ. Обновите даты и значение ввнутренний запрос, чтобы изменить, когда должен начаться подсчет кварталов и сколько кварталов вы хотите.Вы также можете использовать это значение, чтобы изменить определение своих кварталов, пока часть Q1 попадает в JAN, а квартал начинается в первом месяце (то есть Q1 начинается 30 ноября вместо 1 JAN).
Теперь просто присоединитесь к двум :
SELECT qtrString AS originalStrin
, TO_CHAR(qtrEnd,'MM/DD/YYYY') AS convertedString
FROM src
LEFT OUTER JOIN ref_quarters ON src.qtrDate = ref_quarters.qtrString
Результаты :
| ORIGINALSTRIN | CONVERTEDSTRING |
|---------------|-----------------|
| 2010 -Q3 | 09/30/2010 |
| 2011 -Q1 | 03/31/2011 |
| 2011 -Q4 | 12/31/2011 |
| 2012 -Q1 | 03/31/2012 |
Это можетВы также можете сделать строки даты фактическим объектом даты, а также можете добавить различные другие точки данных в таблицу ссылок.