首页 > 解决方案 > 需要分开信息

问题描述

我有一个格式为文件链接的 ClientID,它看起来像:

Doe, John (W21135446).

我需要将其分开为:

Last Name  First Name   File Number
Doe        John         W2135446

包括删除()周围的文件号。如何编写 T-SQL 代码来为我执行此操作?

标签: tsqlcsv

解决方案


我能够使用CHARINDEX()和一些字符串操作系统函数来实现这一点。

SELECT val.ClientID,
       LTRIM(RTRIM(LEFT(ClientID, CHARINDEX(',', ClientID)-1))) AS LastName,
       LTRIM(RTRIM(SUBSTRING(ClientID, CHARINDEX(',', ClientID) + 2, CHARINDEX('(', val.ClientID) - (CHARINDEX(',', ClientID)+2)))) AS FirstName,
       LTRIM(RTRIM(SUBSTRING(ClientID, CHARINDEX('(', ClientID)+1, (CHARINDEX(')', val.ClientID) - CHARINDEX('(', ClientID)-1)))) AS FileNumber
  FROM (VALUES ('Doe, John (W21135446)')) AS val (ClientID);

在使用这样的字符串时,总是伴随着一些值得注意的警告:任何带有逗号的名称值(例如“Jones, Jr”)都会中断,与字符“(”和“)”的意外位置相同。只要您的所有数据都符合这个确切的模式,这应该可以帮助您完成工作。

我使用LTRIM()andRTRIM()函数删除了任何前导或尾随空格,因为我不完全信任我的字符串数学,但只要您验证起点和终点,它们就不是必需的。此外,请密切注意算术分组和运算顺序。

输出:

客户编号 文件编号
能源部约翰 (W21135446) 能源部 约翰 W21135446

推荐阅读