Załóżmy, że masz tabelę:
CREATE TABLE test (string VARCHAR(50)) INSERT INTO test VALUES(’S-123′),
(’SKOK-12#34′),
(’ABC?CDE/12/EG/19871′)
Zauważ, że każdy z napisów kończy się jakąś liczbą. Jak wyciąć liczbę z napisu w tym przypadku? Przydatna będzie funkcja PATINDEX. Funkcja ta potrafi znaleźć wystąpienie określonego wzorca w napisie. Tylko czym miałby być u nas ten napis. Wycięcie z końca napisu liczby polega na znalezieniu pierwszego znaku, który liczbą nie jest patrząc od końca. Maska, która określa znak nie będący liczbą wygląda tak: '%[^0-9]%’ natomiast obrót napisu tak, by analizę wykonać od końca zapewni funkcja REVERSE:
SELECT string, PATINDEX(’%[^0-9]%’, REVERSE(string))FROM test
W ten sposób odnajdujemy pozycję pierwszego znaku (od końca) nie będącego cyfrą. Teraz pozostaje skonstruować wyrażenie wycinające ten fragment napisu:
SELECTstring,
PATINDEX(’%[^0-9]%’, REVERSE(string)),
RIGHT(string,PATINDEX(’%[^0-9]%’, REVERSE(string))-1)
FROM test