如何在Snowflake中从字符串提取YYYYMMDD格式的年月日
从Snowflake字符串中提取年月日并格式化
针对你给出的示例字符串'IN_2001_02_23_guid',这里提供两种简单高效的解决方案:
方法一:利用SPLIT_PART分割拼接
因为字符串是下划线分隔的固定结构,年、月、日分别是第2、3、4个分割段,直接用SPLIT_PART提取后拼接即可:
SELECT CONCAT( SPLIT_PART('IN_2001_02_23_guid', '_', 2), SPLIT_PART('IN_2001_02_23_guid', '_', 3), SPLIT_PART('IN_2001_02_23_guid', '_', 4) ) AS formatted_date;
运行后会返回20010223。如果是处理表中的列数据,把字符串替换成列名即可:
SELECT CONCAT( SPLIT_PART(your_column, '_', 2), SPLIT_PART(your_column, '_', 3), SPLIT_PART(your_column, '_', 4) ) AS formatted_date FROM your_table;
方法二:使用正则表达式提取
如果字符串结构有轻微变化(比如前缀长度不固定),正则表达式更灵活,直接匹配并捕获日期部分:
SELECT REGEXP_REPLACE('IN_2001_02_23_guid', '^.*_(\\d{4})_(\\d{2})_(\\d{2})_.*$', '\\1\\2\\3') AS formatted_date;
正则说明:
^.*_:匹配字符串开头到第一个日期段前的下划线(\\d{4})_(\\d{2})_(\\d{2}):捕获4位年、2位月、2位日_.*$:匹配日期段后的下划线及剩余内容\\1\\2\\3:将捕获的年、月、日拼接成无分隔符的日期串
也可以先提取带下划线的日期段,再移除下划线:
SELECT REPLACE(REGEXP_SUBSTR('IN_2001_02_23_guid', '\\d{4}_\\d{2}_\\d{2}'), '_', '') AS formatted_date;
内容的提问来源于stack exchange,提问作者Saloni
相关产品推荐
相关产品推荐

