252 messaggi dal 03 ottobre 2006
Sto litigando con SqlServer e la ricerca di stringhe fatta con espressioni regolari
Ho una tabella con una colonna che contiene dati come questi:

1
2
3
...
1TER
2TER
3TER
...
10TER
...
1NA
2NA
...
1NATER
2NATER
...

e vorrei isolare solo le righe del tipo 1TER 2TER 3TER... 10TER
l'unica istruzione che mi da un risultato che pensavo completo è questa:
select colonna from tabella where colonna like '[0-9]TER'
ma questa mi estrae da 1TER a 9TER non mostrandomi la 10TER

Ho provato ad approfondire il discorso usando espressioni regolari e usando uguale al posto di like ma con mia grande sorpresa la seguente non restituisce alcun risultato:
select colonna from tabella where colonna = '[0-9]TER'
ne tanto meno questa:
select colonna from tabella where colonna like '[0-9]*TER'
dove sbaglio ?
55 messaggi dal 09 febbraio 2005
ciao,
sql server non ha un gran supporto alle regex
per cui, a meno di non voler aggiungere una function c# a sqlserver, bisogna arrangiarsi;

vedi se l'obrobrio qui sotto ti copre tutti i casi:


use tempdb
go

declare @testo varchar(50) = '012TER' --OK
--declare @testo varchar(50) = '10E2TER' --KO
--declare @testo varchar(50) = '10 TER' --KO
--declare @testo varchar(50) = '12TERTER' --KO

select q.testo
, substring(q.testo, 0,len(q.testo)-2) as t  
from
(select @testo as testo) q
where 
 --Termina con TER
   q.testo like '%TER'
-- e tolto ultimo TER devono restare solo le cifre 0-9
 and not substring(q.testo, 0,len(q.testo)-2) like '%[^0-9]%' 


Modificato da sspintux il 30 gennaio 2019 18:52 -
252 messaggi dal 03 ottobre 2006
grazie per dritta
penso di aver risolto clamorosamente con questa riga


select colonna from tabella where colonna like '%TER' and not substring(colonna, 0,len(colonna)-2) like '%[^0-9]%'

in questo modo ottengo esattamente e solo
1TER
2TER
...
10TER
11TER
...

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.