You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake表中文件名转驼峰式:如何避免扩展名首字母大写?

解决Snowflake中文件名驼峰转换时扩展名意外大写的问题

你当前使用以下SQL实现文件名驼峰转换,但结果里扩展名(如.Txt)的首字母被意外大写,需要保留扩展名全小写的驼峰格式:

SELECT REPLACE(INITCAP(REPLACE(LOWER('ABC_defg_HiJk_lMn_123.txt'),'_',' ')),' ','_');

示例对比

  • 源文件名:'ABC_defg_HiJk_lMn_123.txt'
  • 当前转换结果:'Abc_Defg_Hijk_lmn_123.Txt'
  • 期望结果:'Abc_Defg_Hijk_lmn_123.txt'

优先方案:正则表达式实现

利用Snowflake的REGEXP_REPLACE函数,拆分文件名主体与扩展名,仅对主体做驼峰转换,保留扩展名小写:

方法1:分组匹配拆分处理

SELECT 
  REGEXP_REPLACE(
    LOWER('ABC_defg_HiJk_lMn_123.txt'),
    '^(.*?)(\.[^.]+)$',
    REPLACE(INITCAP(REPLACE('\\1', '_', ' ')), ' ', '_') || '\\2'
  ) AS camel_case_filename;

逻辑说明:

  • 正则^(.*?)(\.[^.]+)$将文件名分为两组:\\1捕获最后一个点前的所有内容(文件名主体),\\2捕获从最后一个点开始的完整扩展名(如.txt)
  • 先将整个文件名转小写,对主体部分执行你原有的驼峰转换逻辑,最后拼接保留原格式的扩展名

方法2:正则直接替换驼峰(更简洁)

SELECT 
  REGEXP_REPLACE(
    LOWER('ABC_defg_HiJk_lMn_123.txt'),
    '(_|^)([a-z])(?![^.]*$)',
    '\\1\\U\\2'
  ) AS camel_case_filename;

逻辑说明:

  • 正则(_|^)([a-z])(?![^.]*$)匹配下划线或字符串开头后的小写字母,且该字母不在扩展名区域((?![^.]*$)确保后续内容不是到结尾都没有点,即排除扩展名部分)
  • \\1\\U\\2将匹配到的小写字母转为大写,同时保留下划线或开头位置,实现驼峰格式

备选方案:字符串函数拆分处理

如果对正则不太熟悉,也可以用SPLIT_PART拆分文件名和扩展名:

SELECT 
  REPLACE(INITCAP(REPLACE(LOWER(SPLIT_PART('ABC_defg_HiJk_lMn_123.txt', '.', 1)), '_', ' ')), ' ', '_') 
  || '.' || LOWER(SPLIT_PART('ABC_defg_HiJk_lMn_123.txt', '.', 2)) AS camel_case_filename;

逻辑说明:

  • SPLIT_PART(..., '.', 1)提取点之前的文件名主体,执行原驼峰转换逻辑
  • SPLIT_PART(..., '.', 2)提取扩展名并强制转小写,最后拼接两部分

内容的提问来源于stack exchange,提问作者BabaGee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 16:52:40