2013-12-09 32 views
0

可能的输入:如何在SQL Server中空白之前获取字符串? ''

的Hello World

啦啦,啦啦

杰克·邦迪

我想进入一个变量字符串的第一个空字符串BEFORE ''。

相应的'你好'或'拉'或'杰克'。

我该如何去做这件事?

+0

重复。如果你需要,你可以很容易地通过LTRIM()环绕整个表达式摆脱的那个http://stackoverflow.com/questions/707610/extract-the-first-word-of-a-string-in-a-sql-server-query – BWS

+0

当字符串不包含时,你想要发生什么空间? –

回答

4

简单(无需处理我的评论)是:

SELECT LEFT(@string, CHARINDEX(' ', @string)); 

您还需要照顾,其中字符串不包含空白的情况。一种方法是如下,假设@string最多可有255个字符:

SELECT LEFT(@string, COALESCE(NULLIF(CHARINDEX(' ', @string), 0), 255)); 

这些会留下拖空间,如果空间中找到。从这里的空间被发现的位置减去一个

SELECT LTRIM(LEFT(@string, COALESCE(NULLIF(CHARINDEX(' ', @string), 0), 255))); 

或者:

SELECT LEFT(@string, COALESCE(NULLIF(CHARINDEX(' ', @string)-1, -1), 255)); 
+0

如果字符串长度未知:'SELECT LEFT(@string,ISNULL(NULLIF(CHARINDEX('',@string) - 1,0),Len(@string)));' – Mike

+0

@Mike字符串长度如何“未知“?当然,变量或列已被定义为最大长度。 –

+0

@Mike与MAX仍然有一个最大(没有双关语意图)。似乎是我的一个边缘案例。通常情况下,如果你不需要,你不想打扰执行昂贵的长度检查。你可以在[SQL Fiddle](http://sqlfiddle.com)上显示这个错误的非空列的repro吗? –

0
DECLARE @v AS VARCHAR(MAX) = 'Hello world' 
SELECT SUBSTRING(@v, 0, CHARINDEX(' ', @v)) 
相关问题