Jak wyciąć cyfry z końca napisu (SQL)?

1-Kwi-2012

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:

SELECT
   string,
   PATINDEX(‚%[^0-9]%’, REVERSE(string)),
   RIGHT(string,PATINDEX(‚%[^0-9]%’, REVERSE(string))-1)
FROM test

Dodaj komentarz:

Autor: Rafał Kraik