8

我整个上午都在寻找这个。

我对 SQL Server 的了解并不出色,而且我没有答案。

具体例子是:City-Of-StylePart1-Part2

我需要将这些示例拆分为CityandOf-StylePart1and Part2

我想出了这段代码,但如果字符串包含“-”,它会切换 part1 和 part2。

PARSENAME(REPLACE('sample-string', '-', '.'), 1))

非常感谢您对完成此操作的任何帮助(最好没有 200 行功能)。

4

4 回答 4

30

如果我理解正确,这将完成这项工作;单击此处获取小提琴

DECLARE @s VARCHAR(50)= 'City-Of-Style'

SELECT SUBSTRING(@s,0,CHARINDEX('-',@s,0)) AS firstPart,
    SUBSTRING(@s,CHARINDEX('-',@s,0)+1,LEN(@s)) AS secondPart
于 2012-11-17T13:19:55.197 回答
2

如果字符串中没有破折号,则为空白。如果有破折号,则下面的代码段为您提供第一部分,否则为整个字符串。

DECLARE @TextIn VARCHAR(50)= 'City-Of-Style'
DECLARE @TextOut VARCHAR(500)
SELECT CASE WHEN CHARINDEX('-',@TextIn)>0 THEN SUBSTRING(@TextIn,0,CHARINDEX('-',@TextIn,0)) ELSE @TextIn END 
于 2017-02-21T16:03:01.837 回答
2

在 SQL 中,您可以使用该split_part函数。

例如cast(split_part(column,'-',1) as text) as new_column

输入:king-adfad-adfadd
输出:king

于 2018-08-13T13:33:17.833 回答
0

基于先前的答案,我将其作为解决方案提供 - 它提供了第一个和最后一个元素。如果没有找到分隔符,则最后一个元素为空。

DECLARE 
@del varchar(1) = '-',
@TextIn nvarchar(20) = 'City-Of-Style'
SELECT CASE WHEN CHARINDEX(@del,@TextIn)>0 THEN SUBSTRING(@TextIn,0,CHARINDEX(@del,@TextIn,0)) ELSE @TextIn END AS firstPart,
 CASE WHEN CHARINDEX(@del,@TextIn)>0 THEN SUBSTRING(@TextIn,CHARINDEX(@del,@TextIn,0)+1,LEN(@TextIn)) ELSE '' END AS secondPart

或者,如果您正在使用存储过程,则可以将结果分配给变量:

DECLARE 
@del nvarchar(1) = '-',
@firstPart nvarchar(100),
@lastPart nvarchar(100),
@TextIn nvarchar(20) = 'City-Of-Style'
SELECT @firstPart = (CASE WHEN CHARINDEX(@del,@TextIn)>0 THEN SUBSTRING(@TextIn,0,CHARINDEX(@del,@TextIn,0)) ELSE @TextIn END),
@lastPart = (CASE WHEN CHARINDEX(@del,@TextIn)>0 THEN SUBSTRING(@TextIn,CHARINDEX(@del,@TextIn,0)+1,LEN(@TextIn)) ELSE '' END)

select @firstPart, @lastPart
于 2021-09-16T17:37:40.123 回答