Nemzetközi környezetben a legkülönbözőbb informatikai rendszerekre igaz hogy gyakran előjönnek problémák, pl. különleges karakterek szövegekben, eltérő dátum és számábrázolás, amik kezelése nem mindig triviális. Például keleti szövegek tárolása latin betűkészleten nem lehetséges, szükség lesz bővebb, unicode karakterkészlet használatára, de ekkor is kérdéses pl. hogy a kínai-szanszkrit-arab karakterek szöveg rendezésekor hová kerüljenek, a latin betűk elé, mögé, esetleg hangi jelentés alapján közé. De ha a magyar környezetnél maradunk, ott sem ritka különféle rendszereknél -pláne ha az régebbi - hogy az "é", "í" hosszú ékezetes betűk a "z" után kerülnek, mivel az angol ábécében nem található karakterek kódja magasabb a z-nél.
MSSQL-nél a collation (betűkészlet, rendezési szabályok) tulajdonság határozza meg a karakteres változókon alkalmazott operátorok működését. Rendezésnél és szűrésnél megadható hogy milyen nyelvi szabályok szerint történjen a művelet (char, varchar, ntext oszlopoknál), collate kulcsszó segítségével. Az adattáblák oszlopainak collation-ja melyet a tábla létrehozásakor lehetett beállítani - illetve az adatbázis alapértelmezett típusát kapta, alapértelmezetten megadja hogy történik a művelet, ezt felülírhatjuk. Bizonyos collation-ok csak unicode adattípusokra használhatóak.
Adatbázis szinten megadható alapértelmezett collation:
CREATE DATABASE teszt
COLLATE SQL_Latin1_General_CP1_CI_AS ;
ALTER DATABASE teszt
COLLATE Latin1_General_100_CI_AS ;
A collation úgy áll össze,
1. van egy specifikus rész, pl. ország, nyelv, pl „Latin1_General_100”
2. majd kis-nagybetű figyelembevétele:
- CI (Case Insensitive) - nem tesz különbséget a kis és nagy betű között
- CS (Case Sensitive) - különbséget tesz kis és nagy betű között
3. ékezet figyelembevétele
- AI (Accent Insensitive) ékezet nincs hatással
- AS (Accent Sensitive) hatással van
azaz a Latin1_General_100_CI_AS latin (angol) abc szerint rendez és csak ékezetre érzékeny.
Lekérdezésnél a következő lesz a szintaxis, ha el akarok térni a beállított collationtól:
select * from stops
where stop_name collate Latin1_General_100_CS_AS like '%Bud%'
--kis-nagybetű érzékeny, ékezetfüggő szűrés
order by stop_name collate Latin1_General_100_CI_AS
--kis-nagybetű független rendezés
Számok, dátumok formázására első sorban a format parancs szolgál, ahol megadható ország, vagy maszk:
select FORMAT(1.11, 'N', 'en-us') --usa szám
1.11
select FORMAT(1.11, 'N', 'hu-hu') --magyar szám
1,11
select FORMAT(1.11, 'C', 'en-us') --usa pénz
$1.11
select FORMAT(1.11, 'C', 'hu-hu') --magyar pénz
1,11 Ft
select FORMAT(1.11, '00.0') --maszk
01.1
select FORMAT(getdate(),'D','en-us')--usa dátum
Wednesday, August 16, 2017
select FORMAT(getdate(),'D','hu-hu')--magyar dátum
2017. augusztus 16.
select FORMAT(getdate(),'yyyy-MM-dd')--dátum-maszk
2017-08-16
Másik lehetőség a számformázásra az str függvény, ez a számot stringgé konvertálja, a két paramétere a tizedes pont előtti és utáni számjegyek számát adja meg:
select str(12345.6789, 10, 3)
12345.679
select str(12345.6789, 3, 3)--hibás, nem fér ki
***
Az inputhoz általában maszk is megadandó, nem kezeli a nyelvi formát automatikusan, azaz pl. az 1000 számot 1.000,00 formában nem kaphatja meg az SQL szerver, annak átalakításáról gondoskodni kell.
Az sql szerver nyelvi beállítása 3 szinten történhet: SQL Server példány -> User login -> Session szintű beállítás, a magasabbat örökli az alacsonyabb, viszont felüldefiniálható.
SELECT @@language -- a session nyelvét írja ki
Globális nyelv megváltoztatása szerver szinten (rendszergazdai feladat):
EXEC sp_configure 'default language', 0 ;--nyelv beállítása, 0 angol, 13 magyar
ALTER LOGIN a felhasználói beállítások megváltoztatása (többi felhasználóra nem hat):
ALTER LOGIN user with
DEFAULT_LANGUAGE = "Hungarian"
Session szinten (másik sessionra nem hat):
SET LANGUAGE Italiano;
L'impostazione della lingua è stata sostituita con Italiano.
SET LANGUAGE Magyar;
Nyelvi beállítás átállítva a következőre: magyar.
Ez első sorban az adatbázis üzeneteinek nyelvét állítja, de hat pl. a datename függvényre, a datetime formázására is.
Természetesen a szám és dátum adatok tárolása területi beállításoktól független, a megjelenítésre, illetve néhány esetben az inputok feldolgozására vannak ezek a beállítások hatással.
Amennyiben továbblépnél és szeretnéd ezekből a lehetőségekből a mindennapi munkában minél többet hasznosítani, keress fel minket az elérhetőségeink valamelyikén, és mi segítünk megtalálni azokat a területeket, ahol a legnagyobb üzleti hasznot realizálhatod egy ilyen eszköz használatával, természetesen szakmai támogatást nyújtunk a bevezetéshez