Deutsche SQL Server Konferenz  minimieren 

Deutsche SQL Server Konferenz


Übersetzung von Datumsbezeichnungen

Mai 9

Written by:
09.05.2009 07:17  RssIcon

Übersetzung von Datumsbezeichnungen

In manchen Projekten braucht man zumindest für die Anzeige im Client die Übersetzung von Datumsbezeichnungen, zum Beispiel in Business Intelligence Projekten. Im MSSQL gibt es schon die Möglichkeit, sich die Bezeichnung in einer bestimmten Sprache ausgeben zu lassen, indem man zu der Sprache wechselt:

 

SET NOCOUNT ON;
SET LANGUAGE English; SELECT DATENAME(mm, Getdate()), DATENAME(dw, Getdate());
SET LANGUAGE French;  SELECT DATENAME(mm, Getdate()), DATENAME(dw, Getdate());
SET LANGUAGE Italian; SELECT DATENAME(mm, Getdate()), DATENAME(dw, Getdate());
SET LANGUAGE Dansk;   SELECT DATENAME(mm, Getdate()), DATENAME(dw, Getdate());

 

Ergebnis:

Changed language setting to us_english.
------------------------------ ------------------------------
December                       Monday
 
Le paramètre de langue est passé à Français.
------------------------------ ------------------------------
décembre                       lundi
 
L'impostazione della lingua è stata sostituita con Italiano.
------------------------------ ------------------------------
dicembre                       lunedì
 
Changed language setting to Dansk.
------------------------------ ------------------------------
december                       mandag

 

 

Welche Sprachen der MSSQL unterstützt findet man im VIEW:

SELECT *
FROM sys.syslanguages

 

Genau dort findet man auch die hinterlegten Übersetzungen, die man selbst nutzen kann, wenn man nicht immer die Sprache umstellen will, z.B. beim Initialen Aufbau einer Tabelle für die Zeithierarchie für BI/OLAP.

Nur wie? Ich habe mir eine kleine UDF dafür erstellt, die mir die Übersetzung ausliest; es gibt dabei keine große Logikprüfung oder Fehlerbehandlung. Verwendet wird für die Suche die LangID vom MSSQL, man kann es aber auch auf die LcId (Language Code ID) ändern, wie sie unter Windows verwendet wird (Deutsch: LangID = 1, LcId = 1031)

-- Alte Version entfernen, sofern vorhanden
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'FN' AND name = 'fnTranslateDateName')
      DROP FUNCTION dbo.fnTranslateDateName
GO
 
-- Übersetzen von Datumsbezeichnungen
CREATE FUNCTION dbo.fnTranslateDateName
    (@langid smallint,
     @datepart smallint,   -- 1 = Tag, 2 = Monat kurz, 3 = Monat lang
     @datepartno smallint  -- Nummer des gesuchten Datumsteil, z.B. 3 = März
    ) RETURNS nvarchar(30)
BEGIN
    DECLARE @sNames nvarchar(372);
    DECLARE @sDateName nvarchar(30); -- Max für Tag/Monatsname
    DECLARE @iNextPos smallint;
    DECLARE @iLastPos smallint;
    DECLARE @iLoop smallint;
 
    IF @datepart = 1 
        SET @sNames = (SELECT days FROM sys.syslanguages
                       WHERE [langid] = @langid);
    IF @datepart = 2
        SET @sNames = (SELECT shortmonths FROM sys.syslanguages
                       WHERE [langid] = @langid);
    IF @datepart = 3
        SET @sNames = (SELECT months FROM sys.syslanguages
                       WHERE [langid] = @langid);
    -- Überprüfung: Wurde Datumstext gefunden?
    IF ISNULL(@sNames, '') <> '' AND (@datepart BETWEEN 1 AND 3) 
                                 AND (@datepartno BETWEEN 1 AND 31)
    BEGIN
        SET @iLoop = 1;
        SET @iNextPos = 0;
 
        WHILE @iLoop <= @datepartno
        BEGIN
            SET @iLastPos = @iNextPos;
            SET @iNextPos = CHARINDEX(',', @sNames, @iNextPos + 1);
            SET @iLoop = @iLoop + 1;
        END
        -- Wenn letzte Stelle gesucht wurde, war NextPos = 0 => Auf Endlänge setzen
        IF @iNextPos = 0 AND @iLastPos <> 0 
            SET @iNextPos = LEN(@sNames) + 1;
        SET @sDateName = SUBSTRING(@sNames, @iLastPos + 1, @iNextPos - @iLastPos - 1);
    END
    RETURN @sDateName;
END
 
(Übersetzung von Datumsbezeichnungen)

Tags:
Categories:

Your name:
Gravatar Preview
Your email:
(Optional) Email used only to show Gravatar.
Your website:
Title:
Comment:
Add Comment   abbrechen 
Unser Newsletter  minimieren 

Unseren aktuellen Newsletter im PDF-Format gibt es hier zum Download:

 Das Newsletterarchiv ist im Mitgliedsbereich zugänglich.

 


 


Suche  minimieren