Как конвертировать 2011 -Q4 в 12-31-2011 в оракул sql? - PullRequest
0 голосов
/ 27 ноября 2018

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

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

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

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

0 голосов
/ 27 ноября 2018

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

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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...