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

Komentarze są wyłączone

Autor: Rafał Kraik