如何将YYYYMM转换/提取为年份和月份名称?Teradata SQL.



所以我得到了YYYYMM的日期格式(例如201910年10月为2019(,我想要的是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,'月'(来获取月份名称,但是,它似乎不起作用。

还有其他选择吗?

你试过吗:

1.

与to_char

to_char(Year_Month_Date, 'Month')

阿拉伯数字。

如果您没有找到任何更简单的解决方案,您可以随时为所有 12 个月添加一个CASE WHEN......

3.

格式:

Year_Month_Date(format 'MMMM')

或者对于与年份的组合:

Year_Month_Date(format 'MMMMBYYYY')

你很接近:

将 int 转换为日期,然后应用TO_CHAR:

To_Char(Cast((Calendar_Year_Month-190000) * 100 + 1 AS DATE), 'Month') AS cal_month

提取年份很简单:

Calendar_Year_Month/100 as cal_year

假设您的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系统可供测试,但请尝试一下并让我知道。

最新更新