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

SQL Server(T-SQL)の現在のセッションで使用されている日付形式を見つける方法

    SQL Serverを使用する場合、現在の接続には、言語、日付形式などを決定するいくつかのオプションが含まれます。これらはデフォルトで設定できますが、セッション中にSET ステートメント。

    日付形式は、データベースに保存するために日付値に変換されるため、文字列の解釈に影響を与えます。 SET LANGUAGEを使用して言語を設定する場合 、日付形式の設定は、それに応じて暗黙的に設定されます。これは、SET DATEFORMATで明示的にオーバーライドできます。 ステートメント。

    いずれの場合も、DBCC USEROPTIONSを使用して、現在の日付形式を見つけることができます。 指図。このコマンドはSETを返します 現在の接続に設定されているオプション。

    構文

    構文は次のようになります:

    DBCC USEROPTIONS  
    [ WITH NO_INFOMSGS ]

    オプションのNO_INFOMSGS 引数は、重大度レベルが0から10のすべての情報メッセージを抑制します。

    コマンドの実行例と、現在のテストマシンで得られる結果は次のとおりです。

    DBCC USEROPTIONS;
    

    結果:

    +-------------------------+----------------+
    | Set Option              | Value          |
    |-------------------------+----------------|
    | textsize                | -1             |
    | language                | us_english     |
    | dateformat              | mdy            |
    | datefirst               | 7              |
    | lock_timeout            | 5000           |
    | quoted_identifier       | SET            |
    | arithabort              | SET            |
    | ansi_null_dflt_on       | SET            |
    | ansi_warnings           | SET            |
    | ansi_padding            | SET            |
    | ansi_nulls              | SET            |
    | concat_null_yields_null | SET            |
    | isolation level         | read committed |
    +-------------------------+----------------+
    
    >

    前述のように、これらのオプションはSETで変更できます ステートメント。

    現在のセッションの言語を変更してから、コマンドを再実行する例を次に示します。

    SET LANGUAGE German;
    DBCC USEROPTIONS;
    

    結果:

    +-------------------------+----------------+
    | Set Option              | Value          |
    |-------------------------+----------------|
    | textsize                | -1             |
    | language                | Deutsch        |
    | dateformat              | dmy            |
    | datefirst               | 1              |
    | lock_timeout            | 5000           |
    | quoted_identifier       | SET            |
    | arithabort              | SET            |
    | ansi_null_dflt_on       | SET            |
    | ansi_warnings           | SET            |
    | ansi_padding            | SET            |
    | ansi_nulls              | SET            |
    | concat_null_yields_null | SET            |
    | isolation level         | read committed |
    +-------------------------+----------------+
    Die Spracheneinstellung wurde in Deutsch geändert.
    

    つまり、言語が変更されただけでなく、日付形式も変更されたことがわかります。

    ただし、これが目的の日付形式でない場合は、SET DATEFORMATを使用して日付形式を明示的に変更できます。 。

    このように:

    SET DATEFORMAT mdy;
    DBCC USEROPTIONS;
    

    結果:

    +-------------------------+----------------+
    | Set Option              | Value          |
    |-------------------------+----------------|
    | textsize                | -1             |
    | language                | Deutsch        |
    | dateformat              | mdy            |
    | datefirst               | 1              |
    | lock_timeout            | 5000           |
    | quoted_identifier       | SET            |
    | arithabort              | SET            |
    | ansi_null_dflt_on       | SET            |
    | ansi_warnings           | SET            |
    | ansi_padding            | SET            |
    | ansi_nulls              | SET            |
    | concat_null_yields_null | SET            |
    | isolation level         | read committed |
    +-------------------------+----------------+
    
    >

    また、言語をそのままにして、日付形式が指定どおりに変更されていることがわかります。

    sys.dm_exec_requestsビュー

    sys.dm_exec_requestsにクエリを実行して、現在のリクエストで使用されている日付形式を返すこともできます。 システムビュー。このビューは大量の列を返しますが、関心のある列のみに絞り込むことができます。この場合、関心があるのは1つの列(date_format)のみです。 列:

    SELECT r.date_format
    FROM master.sys.dm_exec_requests r
    WHERE r.session_id = @@SPID;

    結果:

    +---------------+
    | date_format   |
    |---------------|
    | mdy           |
    +---------------+
    

    また、クエリを現在のリクエストだけに絞り込みました。 @@SPIDを使用してこれを行いました 、現在のユーザープロセスのセッションIDを返します。


    1. 1つのフィールドをCLOBとして使用するOracle挿入スクリプトを作成するにはどうすればよいですか?

    2. Oracleの日付から年を取得する2つの関数

    3. mySQLとpostgreSQLのgroupby句、なぜpostgreSQLでエラーが発生するのですか?

    4. Debian/UbuntuでのPostgreSQLレプリケーションセットアップの作成