2011-06-24 61 views
3

我需要從列中提取「SRN = 123」(123的長度動態,SRN =一致)。數據可以是任何東西,沒有統一的格式使用SQL從字段中選擇1個字

456 LOREM limpsump SRN = 123和一些 更多的事情3.

遇到麻煩嘗試使用CHARINDEX找到SRN的終點= 123來獲得長度,有什麼幫助?

SUBSTRING(t.Instructions, 
          CharIndex('SRN=', t.Instructions) + 10, 
          (CHARINDEX('SRN=', t.Instructions)-(CharIndex('SRN=[^0-9.-]', t.Instructions) + 10))) 
+2

你指的是哪些SQL?答案可能會根據你正在使用的內容(oracle,msql等)而改變。 –

+0

如果123部分是動態長度,那麼你需要得到什麼字符串末尾的指示符?在SRN = xxxxxx部分的末尾是否會有空格?子字符串本身是否可以包含空格? – paparush

+1

看起來像你正在使用SQL Server,如果它是2005年或以上,最好的辦法是使用通過CLR UDF的常規expresisons來提取數據。檢查http://msdn.microsoft.com/en-us/magazine/cc163473 .aspx#S1 – Chandu

回答

1
select 'SRN='+left(stuff(@S, 1, charindex('SRN=', @S)+3, ''), patindex('%[^0-9]%', stuff(@S, 1, charindex('SRN=', @S)+3, '')+' ')-1) 

http://data.stackexchange.com/stackoverflow/q/104003/

+0

的末尾在SRN = 123後使用空格,但不是沒有 –

+0

@Tim它的目的是爲了返回patindex而丟失-1。現在測試。 –

+0

沒有骰子,得到一個無效的長度參數傳遞給左側或子字符串函數 –

0

對不起......錯過了你只是想在SRN = 12345

DECLARE @STRING VARCHAR(1000) 
SELECT @STRING = '456 lorem limpsump SRN=123456 and some more things 3.' 
SELECT SUBSTRING(@STRING, CHARINDEX('SRN=', @string, 0), CHARINDEX(' ', @string, CHARINDEX('SRN=', @string, 0)) - CHARINDEX('SRN=', @string, 0)) 
+0

返回「456 lorem limpsump SRN = 123456」 –

1

製作一個巨大的假設,即在你需要的字符串末尾的空間。

declare @str as varchar(100) 
set @str='456 lorem limpsump SRN=123 and some more things 3' 

--for testing, find the starting point 
select charindex('SRN=',@str) 

--for testing, find the ending point 
select charindex(' ',@str,charindex('SRN=',@str)) 

--find your substring 
select substring(@str,charindex('SRN=',@str),charindex(' ',@str,charindex('SRN=',@str))-charindex('SRN=',@str)) 
+0

工作很好,如果有空白,任何可以使用/不使用空格的東西的機會? –

+0

@Tim Boland作爲一個人,如果它不是由於空白造成的,你怎麼知道什麼時候結束?在向我們詢問如何編寫實現這些知識的代碼之前,您需要解釋如何知道字符串的SRN部分已經結束。 –

+0

@Chris,它可能是空白或字段 –

0

這工作

with t as(
select '456 lorem limpsump SRN=12378 and some more things 3.' as col) 

select substring(col,charindex('SRN=',col)+4, 
charindex(' ',col,charindex('SRN=',col))-charindex('SRN=',col)-4) 
from t 
相關問題