我正在处理需要将字符串类型转换为以AWS Athena为单位的整型的用例

以下是我的输入数据-

year    month
2022    jan
2022    feb
2012    apr
2023    may
2019    jun

以下是我所期待的--

year    month   yearmon
2022    jan     202201
2022    feb     202202
2012    apr     201204
2023    may     202305
2019    dec     201912

最初我想使用Case语句,其中我对每个月进行硬编码,将其与Year列连接在一起,最后将Year解析为int.就像-

concat(year, case when month = 'jan' then '01'
...
... end) 

最终投注到int

我试过以下几种格式-

Select month("jan")
Select cast("jan" as date)

但似乎什么都没有奏效.

有没有比硬编码Case语句中的值更好的方法来转换此用例?

推荐答案

你可以试着用date_parse and date_format.以下是《雅典娜》所基于的Trino中的工作:

-- sample data
with dataset(year, month) as (
    values (2022, 'jan'),
    (2022, 'feb'),
    (2012, 'apr'),
    (2023, 'may'),
    (2019, 'jun')
)

-- query
select date_format(
             date_parse(cast(year as varchar) || '-' || month, '%Y-%b'),
             '%Y%m'
           )
from dataset;

它会产生以下输出(我对它能处理小写月份名称感到有点惊讶):

_col0
202201
202202
201204
202305
201906

如果这对您的实际数据不起作用,那么使用Case-When是您可能想要采取的方法.

Sql相关问答推荐

在SQL:2003(PGQ)中,Cypher查询语言、GQL、PGQL和属性图查询的常见子集是什么?'

具有2个共享列的两个表的Amazon RSQL合并

用于平均多个数据并与一个数据点进行比较以判断偏移量的SQL查询

如何根据给定条件PostgreSQL迭代减少组中的行数

对列进行排序后,基于两列删除重复行

找到最新的连线

如果另一个表中不存在值列,则插入失败

在WHERE EXISTS子查询中,列返回是否重要?

其中使用表名作为;行值;记录?

Netezza SQL:判断两个表是否相同

Postgresql - WHERE 中的 MAX 标准 - 初学者问题

获取主表条目,其中最新的辅助条目是 6 个月前

用替代方案替换 SQL Cursor 以提高性能

使用临时表判断记录是否存在 - 如果存在则执行相同的操作

SQL 查询是否返回列表中仅包含某些值而不包含其他值的行?

使用长 IN 子句的 SQL 优化

在presto sql中解析带有区域的时间格式

SQL Server - 判断 ids 层次 struct 中的整数 (id)

SQL for Smarties 类型问题:从表中 Select 记录,并对某些值进行分组

如何计算每行出现的次数并显示在另一个表中?