Mar*_*ell 66
SELECT CASE CHARINDEX(' ', @Foo, 1)
WHEN 0 THEN @Foo -- empty or single word
ELSE SUBSTRING(@Foo, 1, CHARINDEX(' ', @Foo, 1) - 1) -- multi-word
END
Run Code Online (Sandbox Code Playgroud)
你也许可以在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')
Run Code Online (Sandbox Code Playgroud)
Ben*_*ndt 36
我想在没有单独功能的情况下做这样的事情,并提出了这种简单的单线方法:
DECLARE @test NVARCHAR(255)
SET @test = 'First Second'
SELECT SUBSTRING(@test,1,(CHARINDEX(' ',@test + ' ')-1))
Run Code Online (Sandbox Code Playgroud)
这将返回结果"First"
它很短,只是不那么健壮,因为它假设你的字符串不是以空格开头.它将处理单字输入,多字输入和空字符串或NULL输入.
小智 7
通过应用 LTRIM() 增强 Ben Brandt 的答案以补偿即使字符串以空格开头。试图编辑他的答案但被拒绝,所以我现在单独发布在这里。
DECLARE @test NVARCHAR(255)
SET @test = 'First Second'
SELECT SUBSTRING(LTRIM(@test),1,(CHARINDEX(' ',LTRIM(@test) + ' ')-1))
Run Code Online (Sandbox Code Playgroud)
小智 6
在RETURN语句之前添加以下内容将解决字段中包含前导空格的情况:
SET @Value = LTRIM(RTRIM(@Value))
Run Code Online (Sandbox Code Playgroud)
小智 5
马克的回答让我得到了我所需要的大部分信息,但我不得不接受patIndex而不是charIndex因为有时空格以外的字符标记了我的数据单词的结尾。在这里,我用来'%[ /-]%'寻找空格、斜杠或破折号。
Select race_id, race_description
, Case patIndex ('%[ /-]%', LTrim (race_description))
When 0 Then LTrim (race_description)
Else substring (LTrim (race_description), 1, patIndex ('%[ /-]%', LTrim (race_description)) - 1)
End race_abbreviation
from tbl_races
Run Code Online (Sandbox Code Playgroud)
结果...
race_id race_description race_abbreviation
------- ------------------------- -----------------
1 White White
2 Black or African American Black
3 Hispanic/Latino Hispanic
Run Code Online (Sandbox Code Playgroud)
注意:这是一个小数据集(美国联邦种族报告类别);我不知道当扩大到大量时性能会发生什么变化。
| 归档时间: |
|
| 查看次数: |
115445 次 |
| 最近记录: |