2010-09-09 19 views
6

Ich möchte nur die Gerätenummer erhalten aus dieser Zeichenfolge:SQL, wie Mitte der Zeichenfolge zu extrahieren

'<p>The status for the Unit # 3546 has changed from % to OUTTOVENDOR</p>' 

Die Note ist immer genau das gleiche, aber die Einheitsnummer ändert. Wie extrahiere ich nur die Gerätenummer?

Danke!

Antwort

6
declare @String varchar(500) 

set @String = '<p>The status for the Unit # 3546 has changed from % to OUTTOVENDOR</p>' 

select SUBSTRING(@String, charindex('# ', @String) + 2, charindex('has changed', @String) - charindex('# ', @String) - 2) 
0

Sie können dies auf verschiedene Arten tun, verwenden Sie die REPLACE-Funktion, um beide Seiten auszuziehen, verwenden Sie SUBSTRING, wenn Sie garantiert Indexzahlen kennen oder ein SUBSTRING mit einem CHARINDEX mischen.

0
select substring(note, len('<p>The status for the Unit # '),4) from tbl 
+0

Dies macht die schlechte Annahme, dass die Gerätenummer immer 4 Ziffern ist. –

+1

Ja, er sagte, es ist immer genau dasselbe, also glaubte ich ihm. charIndex ('hat sich geändert') ist besser. – Beth

+0

Ich habe die Frage gelesen, dass der Text immer gleich ist, nicht unbedingt die Nummer der Einheitsnummer. –

1

Versuch:

declare @S VarChar(1000) 
    Set @S = 
    '<p>The status for the Unit # 3546 has changed from % to OUTTOVENDOR</p>' 
    Select Substring(@s, 
     charIndex('#', @S)+1, 
     charIndex('has', @S) - 2 - charIndex('#', @S)) 
+0

Ich bin auf der Besetzung in Integer iffy - wir wissen nicht, dass die Einheitennummern immer int sind (z. B. könnte Einheit '362A' sein). – RedFilter

+0

nimm das raus ... (bearbeitet) –

0

So etwas sollte SUBSTRING arbeiten (val, 30, CHARINDEX (‘‘, val, 30) -30)

0

Hier ist eine Version, die verwendet PATINDEX. Es sucht nach der ersten Zahl in einer Zeichenfolge.

declare @MyString varchar(100) 
set @MyString = '<p>The status for the Unit # 3546 has changed from % to OUTTOVENDOR</p>' 

select PATINDEX('%[0-9]%', @MyString), PATINDEX('%[^0-9]%', SUBSTRING(@MyString, PATINDEX('%[0-9]%', @MyString), len(@MyString))) 

select SUBSTRING (@MyString, PATINDEX('%[0-9]%', @MyString), 
    PATINDEX('%[^0-9]%', SUBSTRING(@MyString, PATINDEX('%[0-9]%', @MyString), len(@MyString)))) 
Verwandte Themen