User: Register
You are here:  VereinEinleitung   10. September 2010
Mitgliedschaften Minimize
Official Chapter
Print  

Links Minimize
Print  

Willkommen ! Minimize

Der PASS Deutschland e.V. ist ein eigenständiger Verein. Der Verein ist ein "Official Chapter" der PASS USA, der mit mehr als 15.000 Mitgliedern grössten SQL Server Benutzergruppe der Welt. Der Verein wird von SQL Server Usern betrieben und verfolgt keinen kommerziellen Zweck.

Eines der Ziele des Vereins ist es, die SQL Server Community in Deutschland zu vereinen und zu regionalen regelmäßigen Treffen zu bewegen.

Bitte registrieren Sie sich unverbindlich. Wir vermitteln Ihnen dann Kontakt zu weiteren SQL Server Anwendern in Ihrer Region.

Für Fragen stehen wir Ihnen natürlich jederzeit zur Verfügung.
PASS Deutschland e.V.

Print  

Übersetzung von Datumsbezeichnungen Minimize
Sie sind hier: BlogsBlog von Olaf Helper    
veröffentlich von: Olaf Helper 09.05.2009 07:17

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)
Permalink |  Trackback

Name:
Titel:
Anmerkung:
Anmerkung hinzufügen   Cancel 

Buchshop:Mitgliedsbereich:Impressum:PASS User Blogs
© PASS Deutschland e.V. Terms Of Use Privacy Statement