Zamiana końcówki wyrazu w kolumnie SQL Oracle

Odpowiedz Nowy wątek
2019-05-29 20:37
0

Od razu opiszę, o co mi chodzi. Załóżmy, że w tabeli "przedmioty" istnieje pole "nazwy" zawierające wartości: matematyka, fizyka, muzyka, biologia.

Jak zrobić, aby w dynamicznym wyniku zapytania pojawił się komunikat, w którym nazwa jest odmieniona, np.
'Nie lubię matematyki'
Nie lubię fizyki'
... itp, w zależności od pobranej z kolumny nazwy przedmiotu.

Początek:
Select 'Nie lubię '|| nazwa <----- i tutaj nie wiem, jakimi funkcjami potraktować nazwę.
From przedmioty

Potrzebuję tego na studia, muszę umieć takie rzeczy robić. Powyższy przykład służy tylko zilustrowaniu problemu. Myślałem nad użyciem funkcji decode i substr, ale nie mam większego pomysłu na to.

Pozostało 580 znaków

2019-05-29 21:15
1

najpierw ułóż/poszukaj algorytmu, który dokładnie opisze Ci na podstawie czego należy daną końcówkę zmienić na inną. Zwróć uwagę, że np. język polski po zmianie nie będzie wyglądał tak język polski (ostatnia litera na i) a tak języka polskiego. Jak już to będziesz wiedział to nie powinno być większego problemu z zapisanie tego w pl/sql - sugerował bym utworzyć procedurę, która dokona takiej zamiany i użycie jej w zapytaniu.


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

2019-05-29 22:48
0

Dzięki za odpowiedź.
Bardziej mi chodzi o to by to zrobić w sql, a pl/sql niestety nie znam. Chce to zrobić przy użyciu DML'a (czy jak kto woli DQL'a).

Pozostało 580 znaków

2019-05-29 23:28
1

1) W SQLu dodaj sobie tabelkę: DEKLINACJA (ID_ODMIANY, M, D, C, B, N, MS, W) i tam trzymaj deklinację wyrazów. (M - mianownik, D - dopełniacz itd.)

(1,'fizyka','fizyki','fizyce','fizykę','fizyką','fizyce','fizyko'),
...

W Przedmiotach możesz mieć klucz obcy do deklinacji i stamtąd wyciągasz sobie formę, której potrzebujesz:
PRZEDMIOT (ID_PRZEDMIOTU, NAZWA, ID_ODMIANY)

(1,'fizyka',1)
...

Zapytania mogłyby wyglądać tak:

SELECT 
  P.ID_PRZEDMIOTU, 
  'NIE LUBIĘ '||D.D
FROM
  PRZEDMIOT P JOIN DEKLINACJA D ON P.ID_ODMIANY=D.ID_ODMIANY
WHERE P.NAZWA='fizyka'
;

2) Alternatywnie możesz iść w minimalizm i "hardkodować" odmianę:

SELECT
  'Nie lubię '||DECODE(wyraz,'fizyka','fizyki','matematyka','matematyki',....)  
FROM ...

Szybkie i proste, ale mało elastyczne.

3) Możesz stworzyć funkcję (PL/SQL), która zwróci Ci odmianę i mieć logikę typu:
a) Jak jest w słowniku -> zwróć wartość za słownika
b) Jak nie ma w słowniku -> zaaplikuję heurystykę

Daje to możliwość definiowania heurystyki typu:
a) jak kończy się na "ka", to zamień na "ki" (fizyka -> fizyki)
b) jak kończy się na "er", to zamień na "era" (komputer -> komputera, bohater -> bohatera)
...
Słaba ta heurystyka, bo będzie generować bzdury: pieska (pogoda) -> pieski (pogody), swet"er" -> swet"era" ...

Za to tabelka słownikowa pozwoli Ci dodać masę wyjątków. Dla bazy trzymanie "dużej ilości czegoś" nie jest jednak problemem.

edytowany 2x, ostatnio: yarel, 2019-05-29 23:30

Pozostało 580 znaków

2019-05-30 19:41
0

Yarel, dzięki. Sposób numer 2) jest najbardziej adekwatny do moich potrzeb, mimo że rzeczywiście nie jest optymalny - spełni rolę.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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