Pchełki SQL: między językami

https://xpil.eu/u2t

Dziś Pchełka dość krótka, za to całkiem interesująca, ponieważ podczas jej pisania poznałem nową konstrukcję języka SQL (a konkretnie jego microsoftowej odmiany czyli TSQL).

W ramach zabaw z nową wersją SQL Servera zaciągnąłem sobie do bazy słownik polski oraz angielski.

Ograniczyłem się do słów o długości nieprzekraczającej 15 znaków - tyle bowiem ma w każdą stronę plansza do Literaków.

Tabelki mam teraz dwie: slowa_en oraz slowa_pl. Obydwie napełniłem danymi za pomocą wbudowanego w SQL Server Management Studio Kreatora Importu Danych.

Polskie słówka wziąłem stąd:

http://sjp.pl/slownik/growy/

A angielskie stąd:

https://raw.githubusercontent.com/docdis/english-words/master/words2.txt

Dalej już poszło łatwo:

with q1 as (
	select
		pl.slowo pl,
		en.slowo en
	from 
		slowa_pl pl 
	join slowa_en en 
		on pl.slowo = reverse(en.slowo) 
		and pl.slowo <> reverse(pl.slowo)
	where
		len(pl.slowo) >= 6
) 
select 
	STRING_AGG(pl, ', ') within group (order by pl) slowa_pl,
	STRING_AGG(en, ', ' ) within group (order by pl) slowa_en
from q1

Wynik:

slowa_pl: abulik, amonalem, arenom, argona, asanom, darter, detale, dewonu, diolem, diolom, diorama, elitom, emiter, enotek, erosem, esemes, etamina, etanal, etatem, laisem, lamina, latrom, lianga, liasem, manitu, mijane, murala, nalata, nalatam, natrap, negrom, nitarek, nodoid, pustak, rediom, regres, rekinom, reksom, rematem, renifer, report, rotule, sporem, tenakla, terami

slowa_en: kiluba, melanoma, monera, anogra, monasa, retrad, elated, unowed, meloid, moloid, amaroid, motile, retime, ketone, mesore, semese, animate, lanate, metate, mesial, animal, mortal, agnail, mesail, utinam, enajim, alarum, atalan, matalan, partan, morgen, keratin, diodon, katsup, moider, serger, moniker, mosker, metamer, refiner, troper, elutor, merops, alkanet, imaret

Objaśnienie kodu:

W podzapytaniu q1 wyszukujemy w tabeli z polskimi słówkami takich wyrazów, które przeczytane od tyłu istnieją w słowniku angielskim, ale które zarazem nie są palindromami. Ponieważ jednak jest ich aż 946, żeby nie zaśmiecać wpisu ograniczam się do słów co najmniej sześcioliterowych.

A potem - w zapytaniu głównym - używamy funkcji STRING_AGG, która zamienia wiele wartości tekstowych w kolumnie na jedną wartość w wierszu. Ciekawostką jest możliwość posortowania zgrupowanych wartości - w przykładzie powyżej zarówno słówka polskie jak i angielskie sortuję tym samym kluczem (słowo polskie), dzięki czemu słowa polskie na kolejnych pozycjach odpowiadają przeczytanym wspak słowom angielskim na tych samych pozycjach.

Smutne jest to, że spośród wymienionych tu czterdziestu pięciu par słówek tylko w przypadku czterech z nich rozumiem zarówno polskie jak i angielskie. Które to są - nie powiem 😉 ale szału nie ma.

https://xpil.eu/u2t

Leave a Comment

Komentarze mile widziane.

Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]

Jeżeli zrobisz literówkę lub zmienisz zdanie, możesz edytować komentarz po jego zatwierdzeniu.