sql >> データベース >  >> RDS >> Sqlserver

SQL Server(T-SQL)で特定の言語に使用されている日付形式を見つける方法

    SQL Serverで日付を操作する場合、さまざまな日付形式に簡単につまずくことがあります。たとえば、米国の誰かが2018年1月7日を検討する場合があります。 1月7日を意味しますが、英国の誰かが7月1日を意味すると考えるかもしれません。

    多くの場合、特定の言語/文化にどの日付形式が使用されているかさえわからない場合があります。幸い、SQL Serverはこの情報をリソースデータベースに格納しており、以下の2つの方法のいずれかを使用して情報を取得できます。

    方法1:sp_helplanguageストアドプロシージャ

    sp_helplanguage ストアドプロシージャは、特定の代替言語またはSQLServerのすべての言語に関する情報を返します。これには、それぞれの言語に関連付けられている言語名、そのエイリアス、日付形式、および月の名前が含まれます。

    SQL Serverのすべての言語の情報を返すには、次のコマンドを実行します。

    EXEC sp_helplanguage;

    これにより、非常に大きな結果セットが返されます。 SQLServer2017のインスタンスで実行したときに取得する言語の完全なリストは次のとおりです。

    すべての言語を返したくない場合は、特定の言語に絞り込むことができます。

    次に例を示します:

    EXEC sp_helplanguage Spanish;

    mssql-cliで実行した場合の結果は次のとおりです。

    -[ RECORD 1 ]-------------------------
    langid      | 5
    dateformat  | dmy
    datefirst   | 1
    upgrade     | 0
    name        | Español
    alias       | Spanish
    months      | Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octub
    shortmonths | Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic
    days        | Lunes,Martes,Miércoles,Jueves,Viernes,Sábado,Domingo
    lcid        | 3082
    msglangid   | 3082
    

    @@LANGUAGEを使用することもできます 現在の言語に絞り込みます。例:

    EXEC sp_helplanguage @@LANGUAGE;

    結果:

    -[ RECORD 1 ]-------------------------
    langid      | 0
    dateformat  | mdy
    datefirst   | 7
    upgrade     | 0
    name        | us_english
    alias       | English
    months      | January,February,March,April,May,June,July,August,September,Octobe
    shortmonths | Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
    days        | Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
    lcid        | 1033
    msglangid   | 1033
    

    方法2:sys.syslanguagesビュー

    言語情報を返す2つ目の方法は、sys.syslanguagesに直接アクセスすることです。 システム互換表示。これは、上記のストアドプロシージャが情報を取得するビューです。

    このビューをクエリする方法は次のとおりです。

    SELECT * FROM sys.syslanguages;

    WHEREを追加して、言語に絞り込むこともできます 条項:

    SELECT * FROM sys.syslanguages
    WHERE name = 'Español';

    各言語エントリには名前とエイリアスがあることに注意してください。上記のクエリは、エイリアスを使用するように書き直すことができます:

    SELECT * FROM sys.syslanguages
    WHERE alias = 'Spanish';

    おそらくおわかりのように、ストアドプロシージャ(最初のオプション)を使用する方がはるかに簡単ですが、列のサブセットのみを返したい場合は、このビューが便利です。

    例:

    SELECT 
        name,
        alias,
        dateformat 
    FROM sys.syslanguages
    WHERE alias = 'Spanish';

    結果:

    +---------+---------+--------------+
    | name    | alias   | dateformat   |
    |---------+---------+--------------|
    | Español | Spanish | dmy          |
    +---------+---------+--------------+
    

    1. Mysql ::Error:指定されたキーが長すぎました。キーの最大長は1000バイトです

    2. 初心者のためのデータベースのヒント

    3. SQLServerにデータを挿入する方法

    4. Oracle ODBCドライバはOracleクライアントをどのようにロードしますか?