我想拆分一个字符串并获取空格后的值。我可以在空格之前获取值,但是如何在空格之后获取字符串。
DECLARE @string varchar(20)
SELECT @string = 'Test Name'
SELECT SUBSTRING(@string, 0, CHARINDEX(' ', @string))
编辑:我正在使用SQLServer 2012
答案 0 :(得分:7)
这是使用SUBSTRING
和CHARINDEX
的版本,用于在引入STRING_SPLIT
时SQL Server 2016之前的SQL SERVER版本。
以下任何一种作品:
SELECT SUBSTRING(@string, CHARINDEX(' ', @string) +1, 20)
SELECT SUBSTRING(@string, CHARINDEX(' ', @string) +1, DATALENGTH(@string) - CHARINDEX(' ', @string) +1 )
根据Rao的评论编辑添加说明
我们需要使用CHARINDEX找到空间的位置(它返回一个表示字符串(空格)开始位置的数字。但是我们想要选择的字符串在空格后面开始,因此我们必须加1(+ 1) )到SUBSTRING的起始位置,使起始位置变为CHARINDEX('',@ string)+ 1。
SUBSTRING的第三个参数是要选择的字符串的长度,在第一种情况下,我只是假设您指定为varchar(20)的字符串不能超过20个字符,因此我使用20.注意SUBSTRING将不要尝试选择超出字符串结尾的字符,因此可以安全地指定长度超过剩余字符数的长度。
我的第二个例子根据总字符串的长度(DATALENGTH)减去我们选择前的字符数(CHARINDEX + 1)来获取要选择的字符串的长度
答案 1 :(得分:1)
我找到了
Sub test()
Dim MyArr() As String
Dim ArrItem As String
Dim z As String
Dim x As String
x = "a,b,c,d,e,f,g"
MyArr = Split(x, ",")
For i = 2 To UBound(MyArr)
ArrItem = MyArr(i)
Next i
z = Join(ArrItem, "/")
MsgBox z
End Sub
“从给定位置获取字符串的其余部分”的语法很冗长,因此我改为“删除”位置之前的部分:
SELECT SUBSTRING(@string, CHARINDEX(' ', @string) +1, DATALENGTH(@string) - CHARINDEX(' ', @string) +1 )
STUFF(character_expression,start,length,replaceWith_expression)
这两种方法的工作原理相同,包括CHARINDEX不匹配的地方
答案 2 :(得分:0)
不要使用子字符串,但请使用string_split
。这将返回一个字符串数组。
SELECT value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' ');
返回以下数组:
Lorem
ipsum
dolor
sit
amet.
可在此处找到更多信息:https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql