SQL: конвертировать дд / мм / гггг в ггггQ1 - PullRequest
0 голосов
/ 06 февраля 2019

Как преобразовать дату в финансовые кварталы: 31.03.2008 в 2018q1

Я вытащил набор данных с веб-сайта FDIC.Их формат даты в настоящее время дд / мм / гггг.

Я заинтересован в создании точечной диаграммы / пузырьковой диаграммы с использованием Gapminder.

Однако Gapminder необходимо преобразовать каждую дату в финансовые кварталы.например, yyyyq1, yyyyq2, yyyyq3 или yyyyq4.например, 20017q1, 20017q2, 20017q3 или 2017q4.

Этот запрос должен преобразовать дату в финансовые кварталы, но еще не сделал этого.Что нужно добавить, чтобы преобразовать вывод repdte дд / мм / гггг в ггггq1?

SELECT 

PCR.name,
PCR.repdte as Quarter, 
PCR.idlncorr as NetLoansAndLeasesToCoreDeposits,
CAST(LD.IDdeplam as int) as DepositAccounts$GreaterThan$250k
from All_Reports_20180630_Performance_and_Condition_Ratios as PCR 
join 
'All_Reports_20180630_Deposits_Based_on_the_$250,000_Reporting_Threshold' 
 as LD on PCR.cert = LD.cert
UNION ALL
SELECT
PCR.name, 
PCR.repdte as Quarter,
PCR.idlncorr as NetLoansAndLeasesToCoreDeposits,
CAST(LD.IDdeplam as int) as DepositAccounts$GreaterThan$250k
FROM All_Reports_20180331_Performance_and_Condition_Ratios as PCR
JOIN 
'All_Reports_20180331_Deposits_Based_on_the_$250,000_Reporting_Threshold' 
 as LD on PCR.cert = LD.cert

То, что у меня сейчас есть

Quarter   
03/31/2018 

Формат, необходимый Gapminder для рендеринга пузырьковой диаграммы:

ReportDate
  2009q1       

1 Ответ

0 голосов
/ 06 февраля 2019

Я считаю, что использование

substr(PCR.repdte,7,4)||'q'||CAST(1+((substr(PCR.repdte,1,2)-1) / 3) AS INTEGER)

преобразует дату для вас.

Например, рассмотрите следующее: -

DROP TABLE IF EXISTS PCR;
CREATE TABLE IF NOT EXISTS PCR (repdte);
INSERT INTO PCR VALUES('01/31/2009'),('02/31/2009'),('03/31/2009'),('04/31/2009'),('05/31/2009'),('06/31/2009'),('07/31/2009'),('08/31/2009'),('09/31/2009'),('10/31/2009'),('11/31/2009'),('12/31/2009');

SELECT PCR.repdte,
    substr(PCR.repdte,7,4)||'q'||CAST(1+((substr(PCR.repdte,1,2)-1) / 3) AS INTEGER) FROM PCR;

Что приводит к:-

enter image description here


Дополнительно

Комментарий: -

Работает.Тем не менее, я получаю вывод «018q2» вместо «2018q2».Что бы я изменил, чтобы добавить '2' к '018q2'?

Это может быть связано с тем, что у даты есть часть с переменной длиной дня, то есть если часть дня меньше 10тогда это будет одно число, а не заполнение 0 и двумя числами, когда 10 или больше.

Можно использовать следующее: -

replace(substr(PCR.repdte,6),'/','')||'q'||CAST(1+((substr(PCR.repdte,1,2)-1) / 3) AS INTEGER)
  • это работает, взявгод от 6-го символа и, удалив /, если он существует, рассмотрим следующее

: -

DROP TABLE IF EXISTS PCR;
CREATE TABLE IF NOT EXISTS PCR (repdte);
INSERT INTO PCR VALUES('01/31/2009'),('02/1/2009'),('03/31/2009'),('04/31/2009'),('05/1/2009'),('06/31/2009'),('07/31/2009'),('08/1/2009'),('09/31/2009'),('10/31/2009'),('11/31/2009'),('12/31/2009');
SELECT PCR.repdte,
    substr(PCR.repdte,7,4)||'q'||CAST(1+((substr(PCR.repdte,1,2)-1) / 3) AS INTEGER), -- OLD
    replace(substr(PCR.repdte,6),'/','')||'q'||CAST(1+((substr(PCR.repdte,1,2)-1) / 3) AS INTEGER) -- MODIFIED
FROM PCR;

Что приводит к: -

enter image description here

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