2010-09-09 9 views
6

voglio ottenere solo il numero di unità di questa stringa:SQL come estrarre mezzo di corda

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

La nota è sempre lo stesso, ma il numero di unità modifiche. Come estrarre solo il numero di unità?

Grazie!

risposta

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

È possibile eseguire questo numero di modi, utilizzare la funzione SOSTITUISCI per rimuovere entrambi i lati, utilizzare SUBSTRING se si è sicuri di conoscere i numeri indice o mescolare un SUBSTRING con un CHARINDEX.

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

Questo fa presupporre erroneamente che il numero di unità sia sempre di 4 cifre. –

+1

sì, ha detto che è sempre esattamente lo stesso, quindi gli ho creduto. charIndex ('è cambiato') è migliore. – Beth

+0

Ho letto la domanda per indicare che il testo era sempre lo stesso, non necessariamente la lunghezza del numero di unità. –

1

prova:

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

Sono incerto sul cast per intero - non sappiamo che i numeri di unità sono sempre int (ad esempio, potrebbe essere l'unità '362A'). – RedFilter

+0

prendilo quindi ... (a cura di) –

0

Qualcosa del genere dovrebbe funzionare SOTTOSTRINGA (val, 30, CHARINDEX ('', val, 30) -30)

0

Ecco una versione che utilizza PATINDEX. Cerca il primo numero in una stringa.

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)))) 
Problemi correlati