0

我正在寻找选择 nvarchar 单元格中的第一个单词。例如,文本字段将读取为:

Marcus Jones Contractors 
Pertues Smiths Blacksmiths

我只想提取每行中的第一个世界?

4

2 回答 2

2

我使用了以下方法:

  1. 检查列是否为 NULL,并用于CharIndex查看它是否包含至少一个空格 - 如果为 null 或没有空格,则返回整个值。
  2. 如果有空格,则选择从位置 0 到第一个空格出现的列的子字符串。

这是示例脚本:

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为您的表名)。

于 2013-08-21T09:11:25.220 回答
1
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”

于 2013-08-21T09:10:51.117 回答