在sql server查询中提取字符串的第一个单词的最佳方法是什么?
SELECT CASE CHARINDEX(' ', @Foo, 1) WHEN 0 THEN @Foo -- empty or single word ELSE SUBSTRING(@Foo, 1, CHARINDEX(' ', @Foo, 1) - 1) -- multi-word END
你也许可以在UDF中使用它:
CREATE FUNCTION [dbo].[FirstWord] (@value varchar(max)) RETURNS varchar(max) AS BEGIN RETURN CASE CHARINDEX(' ', @value, 1) WHEN 0 THEN @value ELSE SUBSTRING(@value, 1, CHARINDEX(' ', @value, 1) - 1) END END GO -- test: SELECT dbo.FirstWord(NULL) SELECT dbo.FirstWord('') SELECT dbo.FirstWord('abc') SELECT dbo.FirstWord('abc def') SELECT dbo.FirstWord('abc def ghi')
我想在没有单独功能的情况下做这样的事情,并提出了这种简单的单线方法:
DECLARE @test NVARCHAR(255) SET @test = 'First Second' SELECT SUBSTRING(@test,1,(CHARINDEX(' ',@test + ' ')-1))
这将返回结果"First"
它很短,只是不那么健壮,因为它假设你的字符串不是以空格开头.它将处理单字输入,多字输入和空字符串或NULL输入.
在RETURN
语句之前添加以下内容将解决字段中包含前导空格的情况:
SET @Value = LTRIM(RTRIM(@Value))