Zamiana końcówki wyrazu w kolumnie SQL Oracle

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.

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.

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).

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'
;
  1. 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.

  1. 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.

0

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

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