我有这样的字符串“这是一个你好世界的例子”
现在,我希望在SQL Server中输出该句子的前两个单词作为输出。即这是。
另一个例子: 原句:“完整单词练习” 输出:完整的单词
答案 0 :(得分:13)
您可以按如下方式使用查询:
DECLARE @d nvarchar(100)
SET @d = 'Complete word exercise'
SELECT SUBSTRING(@d, 0, CHARINDEX(' ', @d, CHARINDEX(' ', @d, 0)+1))
或者在查询中使用时:
SELECT SUBSTRING(field1, 0, CHARINDEX(' ', field1, CHARINDEX(' ', field1, 0)+1))
FROM Table
答案 1 :(得分:4)
对于少于2个字的任何字符串,许多解决方案都会中断,这对于希望解析第一个 n 字数的人来说越来越有可能。
让我们首先看一下查询,然后我们如何判断它是否实际正确评估
为此,我们需要嵌套多个CHARINDEX
语句,这些语句采用以下参数:
CHARINDEX( expressionToFind , expressionToSearch [ , start_location ] )
Charindex将返回第一个索引,在该索引中找到特定的字符串。我们一直在做的是通过添加等于第一个找到的实例+1的start_location
来踢球,以便它找到第2,第3,第4个实例等。而且,而不是{ {3}}我们可以使用SUBSTRING(@str, 0,...
来捕获字符串的第一部分,但无论如何,计算要走的深度是困难部分:
DECLARE @string VARCHAR(1000) = 'One Two Three';
SELECT LEFT(@string, CHARINDEX(' ', @string,
CHARINDEX(' ', @string,
CHARINDEX(' ', @string,
CHARINDEX(' ', @string)+1)+1)+1))
但如果我们没有最少的字数,这将失败:
从技术上讲,它只会无限循环。一旦空间不足,它就会从头开始再次索引
弹出测验 ...上述查询解决了什么? 将鼠标悬停在下面以获得答案
SELECT LEFT('One Two Three', 3) -- 'One'
在的解决方案中,我们可以检查最后一个CHARINDEX
是否产生了非零值,这意味着它在该深度水平上达到了一个空间。但是,由于嵌套的charindex有点笨拙,我们可以通过Extracting a specific number of words from a string in sql
DECLARE @string VARCHAR(1000) = 'One Two Three Four Five Six';
SELECT CASE WHEN LEN(@string)-LEN(REPLACE(@string, ' ', '')) < 4
THEN @string
ELSE LEFT(@string, CHARINDEX(' ', @string,
CHARINDEX(' ', @string,
CHARINDEX(' ', @string,
CHARINDEX(' ', @string)+1)+1)+1))
END
如果空格少于4个,我们只返回整个字符串。对于超过四个,我们将找到第四个空格的位置并将弦的左侧部分一直返回到该位置
答案 2 :(得分:1)
仅限ORACLE - 您也可以像这样使用INSTR
:
SELECT SUBSTR(colName, 0, INSTR(colName,' ',1,2)) FROM table
注意:如果行数据少于2个字,则返回空行