如何 convert/extract 从 YYYYMM 到年份和月份名称? Teradata SQL
How to convert/extract from YYYYMM to year and name of Month? Teradata SQL
所以我得到了 YYYYMM 的日期格式(例如 2019 年 10 月的 201910),我想要的是 2019 年和 10 月(以完整的月份名称)。年号很容易,但要获得月份名称有点挑战。
在我的数据中 Calendar_Year_Month
是 INT 格式的可用字段,例如。 201910。我首先转换为 STRING,然后添加随机日期 01 成为 20191001
,然后将其转换为 DATE 格式,如 Year_Month_Date.
CAST(Calendar_Year_Month*100+01 AS VARCHAR(8)) AS Year_Month,
CAST(Year_Month AS DATE FORMAT 'YYYYMMDD')AS Year_Month_Date,
我尝试使用 `TO_DATE(Year_Month_Date,'Month') 来获取月份名称,但是,它似乎不起作用。
还有其他选择吗?
你试过了吗:
1.
和to_char
to_char(Year_Month_Date, 'Month')
2.
如果您找不到任何更简单的解决方案,您可以随时为所有 12 个月添加一个 CASE WHEN...
3.
格式为:
Year_Month_Date(format 'MMMM')
或与年份组合:
Year_Month_Date(format 'MMMMBYYYY')
假设您的 Calendar_Year_Month
格式正确,这是一种方法:
SELECT
SUBSTRING(CAST(Calendar_Year_Month AS CHAR(6)) FROM 1 FOR 4) AS MyYear -- Extract year
CASE SUBSTRING(CAST(Calendar_Year_Month AS CHAR(6)) FROM 5 FOR 2) -- Extract month
WHEN '01' THEN 'January'
WHEN '02' THEN 'February'
WHEN '03' THEN 'March'
WHEN '04' THEN 'April'
WHEN '05' THEN 'May'
WHEN '06' THEN 'June'
WHEN '07' THEN 'July'
WHEN '08' THEN 'August'
WHEN '09' THEN 'September'
WHEN '10' THEN 'October'
WHEN '11' THEN 'November'
WHEN '12' THEN 'December'
END CASE AS MyMonth
FROM MyTable
另一种选择是尝试将 Calendar_Year_Month
转换为 DATE
并使用 TO_CHAR()
:
SELECT
CAST(CAST(Calendar_Year_Month AS CHAR(6)) AS DATE FORMAT 'YYYYMM') AS MyDate,
TO_CHAR(MyDate,'Month') AS MyMonth,
TO_CHAR(MyDate,'YYYY') AS MyYear
FROM MyTable
我没有要测试的 TD 系统,但请尝试一下并告诉我。
你很接近:
将整数转换为日期,然后应用 TO_CHAR:
To_Char(Cast((Calendar_Year_Month-190000) * 100 + 1 AS DATE), 'Month') AS cal_month
提取年份很简单:
Calendar_Year_Month/100 as cal_year
所以我得到了 YYYYMM 的日期格式(例如 2019 年 10 月的 201910),我想要的是 2019 年和 10 月(以完整的月份名称)。年号很容易,但要获得月份名称有点挑战。
在我的数据中 Calendar_Year_Month
是 INT 格式的可用字段,例如。 201910。我首先转换为 STRING,然后添加随机日期 01 成为 20191001
,然后将其转换为 DATE 格式,如 Year_Month_Date.
CAST(Calendar_Year_Month*100+01 AS VARCHAR(8)) AS Year_Month,
CAST(Year_Month AS DATE FORMAT 'YYYYMMDD')AS Year_Month_Date,
我尝试使用 `TO_DATE(Year_Month_Date,'Month') 来获取月份名称,但是,它似乎不起作用。
还有其他选择吗?
你试过了吗:
1.
和to_char
to_char(Year_Month_Date, 'Month')
2.
如果您找不到任何更简单的解决方案,您可以随时为所有 12 个月添加一个 CASE WHEN...
3.
格式为:
Year_Month_Date(format 'MMMM')
或与年份组合:
Year_Month_Date(format 'MMMMBYYYY')
假设您的 Calendar_Year_Month
格式正确,这是一种方法:
SELECT
SUBSTRING(CAST(Calendar_Year_Month AS CHAR(6)) FROM 1 FOR 4) AS MyYear -- Extract year
CASE SUBSTRING(CAST(Calendar_Year_Month AS CHAR(6)) FROM 5 FOR 2) -- Extract month
WHEN '01' THEN 'January'
WHEN '02' THEN 'February'
WHEN '03' THEN 'March'
WHEN '04' THEN 'April'
WHEN '05' THEN 'May'
WHEN '06' THEN 'June'
WHEN '07' THEN 'July'
WHEN '08' THEN 'August'
WHEN '09' THEN 'September'
WHEN '10' THEN 'October'
WHEN '11' THEN 'November'
WHEN '12' THEN 'December'
END CASE AS MyMonth
FROM MyTable
另一种选择是尝试将 Calendar_Year_Month
转换为 DATE
并使用 TO_CHAR()
:
SELECT
CAST(CAST(Calendar_Year_Month AS CHAR(6)) AS DATE FORMAT 'YYYYMM') AS MyDate,
TO_CHAR(MyDate,'Month') AS MyMonth,
TO_CHAR(MyDate,'YYYY') AS MyYear
FROM MyTable
我没有要测试的 TD 系统,但请尝试一下并告诉我。
你很接近:
将整数转换为日期,然后应用 TO_CHAR:
To_Char(Cast((Calendar_Year_Month-190000) * 100 + 1 AS DATE), 'Month') AS cal_month
提取年份很简单:
Calendar_Year_Month/100 as cal_year