如何解决雪花中 SQL CASE 语句中的 CONCAT
我正在尝试将 REVENUE_MONTH 列中的数据转换为 03 而不是 3。我还将将该新列与现有的 REVENUE_MONTH 和 REVENUE_YEAR 列连接起来,以获得类似 2020-03-01 而不是 2020 的数据-3-01。以下是我的两种方法,
- 使用 IN
CONCAT(REVENUE_YEAR,'-',CAST(CASE WHEN REVENUE_MONTH IN (1,2,3,4,5,6,7,8,9) THEN CONCAT(0,REVENUE_MONTH) ELSE REVENUE_MONTH END AS NUMBER(38,0)),'01')
- 使用长度()
CONCAT(REVENUE_YEAR,CAST(CASE WHEN LENGTH(REVENUE_MONTH)=1 THEN CONCAT(0,'01')
不幸的是,他们都返回 2020-3-01 而不是预期的 2020-03-01
解决方法
您尝试过 LPAD 吗?下面应该工作
CONCAT(REVENUE_YEAR,'-',LPAD(REVENUE_MONTH,2,'0'),'01')
,SELECT column1,RIGHT('0' || CAST(column1 AS varchar(2)),2) as month
FROM VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)
ORDER BY 1;
给出:
COLUMN1 MONTH
1 01
2 02
3 03
4 04
5 05
6 06
7 07
8 08
9 09
10 10
11 11
12 12
但也可以:
SELECT column1,RIGHT('0' || column1::text,(12)
ORDER BY 1;
但你真正想要的是LPAD
SELECT column1,LPAD( column1,'0') as month
FROM VALUES (1),(12)
ORDER BY 1;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。