我有一個select語句這樣的字符串:SQL找到選擇
SELECT ColumnA,
CASE ColumnB = 'England' THEN ...
在當時的聲明之後的部分,我想從ColumnC取號,
例如ColumnC值= ABC 123 DEF,我需要'123'部分。
有沒有人知道我可以用來做到這一點在選擇時,'123'將始終在字符串中只有2個空格之間的SQL代碼? (MS SQL)
我有一個select語句這樣的字符串:SQL找到選擇
SELECT ColumnA,
CASE ColumnB = 'England' THEN ...
在當時的聲明之後的部分,我想從ColumnC取號,
例如ColumnC值= ABC 123 DEF,我需要'123'部分。
有沒有人知道我可以用來做到這一點在選擇時,'123'將始終在字符串中只有2個空格之間的SQL代碼? (MS SQL)
主要關鍵在於您需要使用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 ....
您可以使用CHARINDEX
和SUBSTRING
組合:
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
可正常工作所提供的樣本串。
這有一個upvote,但我不能讓它在我的工作...嗯仍然在玩它! – Grace 2011-02-08 09:56:37
你如何得到第二空間的charindex?你可以解釋嗎? – 2011-02-08 10:09:47
SUBSTRING_INDEX(SUBSTRING_INDEX(ColumnC , ' ', 2),' ',-1)
哪些RDBMS您使用將是一個提示相當有幫助。咳咳。 – TToni 2011-02-08 09:42:48