我正在寻找选择 nvarchar 单元格中的第一个单词。例如,文本字段将读取为:
Marcus Jones Contractors
Pertues Smiths Blacksmiths
我只想提取每行中的第一个世界?
我正在寻找选择 nvarchar 单元格中的第一个单词。例如,文本字段将读取为:
Marcus Jones Contractors
Pertues Smiths Blacksmiths
我只想提取每行中的第一个世界?
我使用了以下方法:
CharIndex
查看它是否包含至少一个空格 - 如果为 null 或没有空格,则返回整个值。这是示例脚本:
DECLARE @t TABLE (
data NVARCHAR(max))
INSERT INTO @t
SELECT 'Marcus Jones Contractors'
UNION ALL
SELECT 'Pertues Smiths Blacksmiths'
UNION ALL
SELECT 'SomeOtherValue'
SELECT CASE
WHEN data IS NULL
OR Charindex(' ', data) = 0 THEN data
ELSE Substring(data, 0, Charindex(' ', data))
END
FROM @t
(要使用您自己的数据,只需使用 select 语句,将所有出现的列名替换为data
您的列名,然后替换@t
为您的表名)。
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”