2011-02-08 65 views
3

我有一個select語句這樣的字符串:SQL找到選擇

SELECT ColumnA, 
CASE ColumnB = 'England' THEN ... 

在當時的聲明之後的部分,我想從ColumnC取號,

例如ColumnC值= ABC 123 DEF,我需要'123'部分。

有沒有人知道我可以用來做到這一點在選擇時,'123'將始終在字符串中只有2個空格之間的SQL代碼? (MS SQL)

+4

哪些RDBMS您使用將是一個提示相當有幫助。咳咳。 – TToni 2011-02-08 09:42:48

回答

3

主要關鍵在於您需要使用ColumnC LIKE '% % %',以便在數據不包含兩個空格時不會失敗。

如果您的號碼將是小於20字符長,您可以使用此

SELECT ColumnA, 
CASE WHEN ColumnB = 'England' AND ColumnC LIKE '% % %' THEN 
    RTRIM(LEFT(REPLACE(STUFF(columnc, 1, PatIndex('% %', columnc), ''), ' ', REPLICATE(' ', 20)),20)) 
ELSE .... 

或者你可以用這個

SELECT ColumnA, 
CASE WHEN ColumnB = 'England' AND ColumnC LIKE '% % %' THEN 
    SUBSTRING(
     SUBSTRING(
      ColumnC, 
      1, 
      CHARINDEX(' ',ColumnC,CHARINDEX(' ', ColumnC)+1)-1), 
     1+CHARINDEX(' ', ColumnC), 
     LEN(ColumnC)) 
ELSE .... 
2

您可以使用CHARINDEXSUBSTRING組合:

DECLARE @Test TABLE(ColumnC varchar(100)) 
INSERT @Test 
VALUES ('ABC 123 DEF') 

SELECT SUBSTRING(ColumnC, 
      CHARINDEX(' ', ColumnC) + 1, -- first space 
      CHARINDEX(' ', ColumnC, CHARINDEX(' ', ColumnC) + 1) 
      - CHARINDEX(' ', ColumnC)) -- length from first to second space 
FROM @Test 

可正常工作所提供的樣本串。

+0

這有一個upvote,但我不能讓它在我的工作...嗯仍然在玩它! – Grace 2011-02-08 09:56:37

+0

你如何得到第二空間的charindex?你可以解釋嗎? – 2011-02-08 10:09:47

0
SUBSTRING_INDEX(SUBSTRING_INDEX(ColumnC , ' ', 2),' ',-1)