Как конвертировать 2011 -Q4 в 12-31-2011 в Oracle SQL?

голоса
1

Как конвертировать 2011 -Q4в 12-31-2011в Oracle SQL?

Задан 27/11/2018 в 15:14
источник пользователем
На других языках...                            


2 ответов

голоса
2

Это выражение должно работать, чтобы преобразовать значение в дату:

select add_months(to_date(substr(yq, 1, 4)||'-01-01', 'YYYY-MM-DD'), substr(yq, -1, 1) * 3) - interval '1' day
from (select '2011-Q4' as yq from dual) x

Если вы хотите дату в качестве определенного формата строки, а затем использовать to_char().

Ответил 27/11/2018 в 15:19
источник пользователем

голоса
0

Если вы хотите, чтобы преобразовать много четвертных строк, вы можете создать таблицу реф, чтобы присоединиться.

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 */
)

Примечание: Обновление даты и ROWNUM во внутреннем запросе изменить, когда подсчет квартала должен начать и сколько кварталов вы хотите. Вы также можете использовать это значение, чтобы изменить определение ваших четвертей до тех пор, как часть Q1 падает в январе и четверть начинается на первом из месяца (т.е. Q1 начинается 30 ноября вместо 1 января).

Теперь просто присоединиться к двум :

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 |

Это также может дать вам преимущество делать ваши строки с датой фактического объекта дата, и вы также можете добавить различные другие точки данных в таблице исх.

Ответил 27/11/2018 в 15:49
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more