提问人:BRDroid 提问时间:6/21/2017 最后编辑:user513951BRDroid 更新时间:5/22/2020 访问量:67046
空格后的子字符串
Substring after a space
问:
我想拆分一个字符串并获取空格后的值。我可以在空格之前获取值,但如何在空格之后获取字符串。
DECLARE @string varchar(20)
SELECT @string = 'Test Name'
SELECT SUBSTRING(@string, 0, CHARINDEX(' ', @string))
编辑:我正在使用 SQLServer 2012
答:
不要使用子字符串,而是使用 .这将返回一个字符串数组。string_split
SELECT value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' ');
这将返回以下数组:
Lorem
ipsum
dolor
sit
amet.
更多信息可以在这里找到: https://learn.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql
评论
下面是引入 SQL Server 2016 之前使用 SQL SERVER 版本和用于 SQL SERVER 版本的版本。SUBSTRING
CHARINDEX
STRING_SPLIT
以下任一工作:
SELECT SUBSTRING(@string, CHARINDEX(' ', @string) +1, 20)
SELECT SUBSTRING(@string, CHARINDEX(' ', @string) +1, DATALENGTH(@string) - CHARINDEX(' ', @string) +1 )
根据 Rao 的评论进行编辑以添加描述
我们需要使用 CHARINDEX(返回一个表示字符串(空格)开始位置的数字)找到空间的位置。但是,我们要选择的字符串在空格之后开始,因此我们必须在 SUBSTRING 的起始位置添加 1 (+1),以便起始位置变为 CHARINDEX(' ', @string) + 1。
SUBSTRING 的第三个参数是要选择的字符串的长度,在第一种情况下,我只是假设您指定为 varchar(20) 的字符串不能超过 20 个字符,因此我使用 20。注意 SUBSTRING 不会尝试选择字符串末尾之后的字符,因此可以安全地指定比剩余字符数更长的长度。
我的第二个示例获取要选择的字符串的长度,因为它是总字符串的长度 (DATALENGTH) 减去我们选择前的字符数 (CHARINDEX + 1)
评论
我发现
SELECT SUBSTRING(@string, CHARINDEX(' ', @string) +1, DATALENGTH(@string) - CHARINDEX(' ', @string) +1 )
语法对于“从给定位置获取字符串的剩余部分”很详细,所以我改为“删除”部分 BEFORE 位置:
SELECT STUFF(@string, 1, CHARINDEX(' ', @string), '')
STUFF ( character_expression , start , length , replaceWith_expression )
这两种方法的工作方式相同,包括 CHARINDEX 不匹配的地方
评论