Wybranie konkretnych znaków z pola.

0

Witam,
Poproszę Was o pomoc jak optymalnie wybrać Fragment tekstu z pola.
Pole w tabeli ma postać:
Produkcja 319863
Rozbiór 320149
Produkcja 319863-RWP MMP/347/18
Rozbiór 320149-PW MMP/98/18
Produkcja 320742-RWP MMP/470/18
Rozbiór 320854-PW MMP/172/18

Budowa jest stała:
Nazwa NUMER ZLECENIA-Dokument
Nazwa NUMER ZLECENIA
Chciałbym "wybrać" Numer zlecenia np: 319863 (reszta jest zbędna).
Numer zlecenia jest przyrostowy jak przekroczymy od 1 do ....
Dopisek: -RWP MMP/347/18 - jest zmienny w każdym zakresie, zawiera (Typ dokumenty, magazyn, Numer, Rok)

Tak się zastanawiam....
Czy "PATINDEX" da się jakoś wykorzystać?

0

Zrobiłem coś takiego:

SELECT Adres, 
       PATINDEX('%[0-9]%',Adres) as KodStart,
       LEN(Adres)+1 AS Dlugosc,
       PATINDEX('%-%',Adres) as Kodkoniec,
       CASE
       WHEN PATINDEX('%-%',Adres) = 0 THEN RIGHT(Adres,LEN(Adres)+1 -PATINDEX('%[0-9]%',Adres))
       ELSE SUBSTRING(Adres,PATINDEX('%[0-9]%',Adres), PATINDEX('%-%',Adres)-PATINDEX('%[0-9]%',Adres)) END


       -- SUBSTRING(Adres,PATINDEX('%[0-9]%',Adres), PATINDEX('%-%',Adres)- PATINDEX('%[0-9]%',Adres) ) as KodPocztowy
FROM
(
    -- potraktuj to jak regularną tabelę ;)
    SELECT 'Rozbiór 320984-PW MMP/170/18' as Adres 
    UNION
    SELECT 'Produkcja 32090-RWP MMP/477/18'
    UNION 
    SELECT 'Rozbiór 320149-PW MMP/98/18' 
    UNION 
    SELECT 'Rozbiór 3191234' 
) as Adresy

Można to zrobić "prościej"?

0

Pomoże Ktoś?

0

STRING_SPLIT ?

0
endrius napisał(a):

STRING_SPLIT ?

Do raportowania mam serwer 2012, który współpracuje z bazą na serwerze 2008.
Ta funkcja jest w wersji 2016.
Koszt podniesienia do 2016... przy 150 końcówkach :-).

0

No to SUBSTRING

0

Można by użyć CHARINDEX zamiast PATINDEX, chyba byłoby szybsze.
SUBSTRING(Adres, CHARINDEX(' ', Adres), CASE WHEN CHARINDEX('-', Adres) > 0 THEN CHARINDEX('-', Adres) - CHARINDEX(' ', Adres) ELSE 99 END),

0
Krzywy Ogrodnik napisał(a):

Można by użyć CHARINDEX zamiast PATINDEX, chyba byłoby szybsze.
SUBSTRING(Adres, CHARINDEX(' ', Adres), CASE WHEN CHARINDEX('-', Adres) > 0 THEN CHARINDEX('-', Adres) - CHARINDEX(' ', Adres) ELSE 99 END),

Dzięki,
Wrzuciłem na test w domu i wygląda super.
Zasada działanie podobna ale zapytanie bardziej miłe dla "Oka". Jutro przetestuję w robocie na bazie.
Chociaż zasada działania podobna :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1