Pytanie Szukanie w tekście

0

Witam,

Jestem nowy na forum i z sql też miałem małą styczność. Sprawa wygląda tak.
Posiadam Tabelę w której w jednej kolumnie jednym polu jest wpisywane np:
Nadanie 123452
Odbiór 123452
Brak dysku (nie zawsze jest wpisywane)

Potrzebuję z tego pola wyciągnąć liczbę, która znajduję się po słowie odbiór "123452",liczbę po słowie nadanie "123452" oraz wszystko po słowie brak ' dysku.... Natomiast jeśli nie będzie wpisane nic po słowie odbiór, żeby było napisane NULL

Próbowałem zapytaniem :
SUBSTRING(tabela.kolumna, CHARINDEX(' ',tabela.kolumna,,36),20) as BRAK, - wypisuje po spacji, lecz jesli nie mamy wpisu brak wyświetla pierwsze 20 znaków z wiersza
SUBSTRING(tabela.kolumna, PATINDEX('%____ÓR%',tabela.kolumna),10) AS odbior, - wypisuje lecz ze słowem odbiór

0

A czy nie prościej to będzie Ci pobrać całą komórkę z sql, a potem ją sobie analizować i rozdzielać na elementy już w aplikacji?

0

Niestety nie, gdyż z całego zapytania jest tworzony raport. To jest wycinek całego skryptu.

0

jaki silnik sql 2017?

0

sql 2012

0

W tym polu dane są w ciągu czy masz tam złamanie linii?

0

Sa oddzielone spacjami np. nadanie 123456 odbiór 123456

0

Temat uwazam za zamknięty.

0

@hejda52: pytanie - czy znalazłeś rozwiązanie, czy temat "olałeś"? Bo jeśli masz rozwiązanie problemu to fajnie by było, żebyś się nim podzielił tutaj, może komuś się przyda w przyszłości.

1

Znalazłem rozwiązanie metodą prób i błędów.
Oto rozwiązanie.
IMG_20181119_231514.jpg

2

przepisałem na szybko rozwiązanie, analogicznie zakładamy 'nadanie'

DECLARE @TEMPLATE1 nvarchar(50) = 'ODBIÓR'

case CHARINDEX(@TEMPLATE1,[KOLUMNA])
WHEN 0
THEN NULL
ELSE SUBSTRING ( [KOLUMNA], CHARINDEX (@TEMPLATE1, [KOLUMNA]) +LEN (@TEMPLATE1) +1,CHARINDEX (@TEMPLATE1, [KOLUMNA] ) +6)
END AS 'NUMER_ODBIORU'

1
select regexp_substr(n, '(?<=nadanie ?|Odbiór ?)[0-9]+|(?<=Brak Dysku ?).+') from hjd;

Jest jeszcze coś takiego jak "\K", ale tego operatora, czy podobnego chyba nie obsługuje MySQL (POSIX (ERE)). Trzeba też pamiętać, że chyba nie można podawać nie stałych długości dla positive i negative lookbehind, czyli takie coś jak "(?<=.*)" jest raczej niedozwolone.

0

Odświeżam temat tym razem posiadam 4 dane :)

Nadanie 123456789
Odbiór 123456789
Brak dysku (nie zawsze jest wpisywane)
Zaopatrzenie ryza papieru itp. (nie zawsze jest wpisywane)

Sprawa wygląda tak, że poprzednie rozwiązanie działało przy 3 zmiennych, ale już przy 4 zaczyna się psuć.
Czy jakieś inne pomysły ? np. Szukaj słowo Brak i wypisz wszystko po nim do słowa zaopatrzenie ?

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