选择字符串的一部分

时间:2013-08-21 09:02:24

标签: sql-server sql-server-2008-r2

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

Marcus Jones Contractors 
Pertues Smiths Blacksmiths

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

2 个答案:

答案 0 :(得分:2)

我使用了以下方法:

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

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

答案 1 :(得分: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”