如何在SQL SERVER中使用SUBSTRING获取2个单词

时间:2017-04-13 08:42:46

标签: sql-server

我有一个包含这样的列

Term
------- 
Semester Genap 2016/2017 
Semester Ganjil 2016/2017

我想要

Term
------- 
Semester Genap 
Semester Ganjil

如何使用SUBSTRING做到这一点?

6 个答案:

答案 0 :(得分:2)

还有一种方法,通过XML使用 string-split 方法:

DECLARE @tbl TABLE(ID INT IDENTITY,Term VARCHAR(100));
INSERT INTO @tbl VALUES
 ('Semester Genap 2016/2017')
,('Semester Ganjil 2016/2017');

WITH Casted AS (
                SELECT ID
                      ,CAST('<x>' + REPLACE((SELECT Term AS [*] FOR XML PATH('')),' ','</x><x>') + '</x>' AS XML) AS TheXML
                FROM @tbl
               )
SELECT ID 
      ,TheXML.value(N'(x/text())[1]','nvarchar(max)') AS Part1
      ,TheXML.value(N'(x/text())[2]','nvarchar(max)') AS Part2
      ,TheXML.value(N'(x/text())[3]','nvarchar(max)') AS Part3
FROM Casted;

结果

ID  Part1       Part2   Part3
1   Semester    Genap   2016/2017
2   Semester    Ganjil  2016/2017

答案 1 :(得分:0)

假设你总是想要一个日期左边的所有内容,并且日期以&#34; 2&#34;开头,那么这将起作用(可怕,但有效):

只需用您的列替换变量(仅用于测试):

declare @String varchar(50) = 'Semester Genap 2016/2017'

select SUBSTRING(@String,0,len(@String)-(len(@String)-CHARINDEX('2',@String,0))-1)

产地: &#39; Semester Genap&#39;

答案 2 :(得分:0)

您可以使用charindex查找空格,并使用它来获取前2个单词:

declare @t nvarchar(50);
set @t = 'Semester Genap 2016/2017';

select @t, CHARINDEX(' ', @t), SUBSTRING(@t, 0, charindex(' ', @t, charindex(' ',@t) + 1))

答案 3 :(得分:0)

SUBSTRING(@statement,0,CHARINDEX(@statement,' ',CHARINDEX(@statement,' ')+1))的某些内容。我现在没有办法测试它,但它应该让你朝着正确的方向前进。

  1. CHARINDEX(@statement,' ') - 从找到第一个空格开始(这结束第一个单词
  2. CHARINDEX(@statement,' ',CHARINDEX(@statement,' ')+1) - 接着找到下一个空格,或者更确切地说是从第一个空格后面开始找到第一个空格(这标志着第二个单词的结尾)
  3. SUBSTRING(@statement,0,CHARINDEX(@statement,' ',CHARINDEX(@statement,' ')+1)) - 获取从右开始到第二个空格的子字符串。

答案 4 :(得分:0)

问题的另一个变种。

SELECT SUBSTRING('Semester Genap 2016/2017',1,LEN('Semester Genap 2016/2017') - CHARINDEX(' ',REVERSE('Semester Genap 2016/2017')))

答案 5 :(得分:0)

如果您的字词可能包含199x/199x等旧数据,那么您可以使用PATINDEX查找字符串中的第一个数字。

DECLARE @Term varchar(max) = 'Semester Genap 2016/2017'

SELECT RTRIM(SUBSTRING(@Term, 1, PATINDEX('%[0-9]%', @Term +'0') - 1))