所以这就是我所面临的困境,我有大约5万条记录,每条记录都有一个原告&被告名称,这两个名称都在一列中,我想将它们解析成两个单独的列。这些名称的长度与名称不同,其中一些名称具有前缀或后缀。除了前缀和后缀之外,这不应该是一个难以编写的查询,但是我挂起的地方是在字符串的中间。 我正在使用的数据采用以下格式:
Column_Name
John Doe V Elton John
Jane Doe V Elton John
David Smith V Elton John
我试图编写一个查询来分隔' V'希望我的目标数据最终看起来像这样:
Plaintiff_Name | Defendant_Name |
John Doe | Elton John |
然而,当我告诉它更换一个' v'用' '它用空格替换字符串中的每个V.我们非常感谢您提供的任何建议。
谢谢,
Nathaniel Block
答案 0 :(得分:1)
由于在原始问题的评论中已经说明没有名称将具有“V”后缀,您可以使用CHARINDEX找到“V”的位置(即空间V空间)然后使用SUBSTRING以获得两个部分:
;WITH cte AS
(
SELECT tmp.COLUMN_NAME,
tmp.OTHER_FIELD,
CHARINDEX(' V ', tmp.COLUMN_NAME) AS [DelimiterPosition]
FROM (
SELECT 'John Doe V Elton John', 23
UNION ALL
SELECT 'Jane Doe V Elton John', 78922
UNION ALL
SELECT 'David Smith V Elton John', 932
UNION ALL
SELECT 'David Doe 5th v Elton John', 53
) AS tmp(COLUMN_NAME, OTHER_FIELD)
)
SELECT cte.COLUMN_NAME,
SUBSTRING(cte.COLUMN_NAME, 1, (cte.DelimiterPosition - 1)) AS [Plaintiff],
SUBSTRING(cte.COLUMN_NAME, (cte.DelimiterPosition + 3), 500) AS [Defendant],
cte.OTHER_FIELD
FROM cte
输出:
COLUMN_NAME Plaintiff Defendant OTHER_FIELD
John Doe V Elton John John Doe Elton John 23
Jane Doe V Elton John Jane Doe Elton John 78922
David Smith V Elton John David Smith Elton John 932
David Doe 5th v Elton John David Doe 5th Elton John 53
答案 1 :(得分:0)
你可以替换' v'包括保护' v'在字符串中,如果它没有点或第5个后缀,你可能会丢失一个中间的首字母。