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

SQL Server中如何从列值中提取|分隔符前的可变字符串

SQL Server 提取|分隔符前指定部分的实现方案

现有需求为从格式为XYZ|YYYY-MM-DD的字段中提取|之前的内容,且每行前缀无重复,无需额外去重处理,可参考以下不同场景的实现方式:

通用兼容方案(支持SQL Server 2008及所有更高版本)

通过CHARINDEX定位分隔符位置,再用LEFT函数截取前缀,是兼容性最好的实现:

SELECT 
  LEFT(target_column, CHARINDEX('|', target_column) - 1) AS extracted_xyz
FROM your_table_name;

如果存在部分行不含|的异常数据,可增加CASE判断避免截取报错:

SELECT 
  CASE
    WHEN CHARINDEX('|', target_column) > 0 THEN LEFT(target_column, CHARINDEX('|', target_column) - 1)
    ELSE target_column -- 可根据业务需要替换为自定义默认值
  END AS extracted_xyz
FROM your_table_name;

高版本简化方案(SQL Server 2022及以上)

2022版本后STRING_SPLIT函数支持ORDINAL参数,可直接获取第一个分割项,代码可读性更高:

SELECT 
  s.value AS extracted_xyz
FROM your_table_name t
CROSS APPLY STRING_SPLIT(t.target_column, '|', 1) s
WHERE s.ordinal = 1;

持久化存储提取结果

如果需要将提取的内容永久存储到表中,可新增字段后批量更新:

-- 新增存储提取结果的字段,长度可根据实际业务调整
ALTER TABLE your_table_name ADD extracted_xyz VARCHAR(100);

-- 批量赋值
UPDATE your_table_name
SET extracted_xyz = LEFT(target_column, CHARINDEX('|', target_column) - 1)
WHERE CHARINDEX('|', target_column) > 0;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 02:45:03