sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man hittar datumformatet som används i den aktuella sessionen i SQL Server (T-SQL)

När du använder SQL Server innehåller din nuvarande anslutning ett antal alternativ som bestämmer saker som språk, datumformat etc. Dessa kan ställas in som standard, men de kan också åsidosättas under sessionen genom att använda en SET uttalande.

Datumformatet påverkar tolkningen av teckensträngar när de konverteras till datumvärden för lagring i databasen. När språket är inställt med SET LANGUAGE , är inställningen av datumformat implicit inställd i enlighet därmed. Detta kan uttryckligen åsidosättas med SET DATEFORMAT uttalande.

I vilket fall som helst kan du hitta det aktuella datumformatet genom att använda DBCC USEROPTIONS kommando. Detta kommando returnerar SET alternativ som har ställts in för den aktuella anslutningen.

Syntax

Syntaxen ser ut så här:

DBCC USEROPTIONS  
[ WITH NO_INFOMSGS ]

Den valfria NO_INFOMSGS argument undertrycker alla informationsmeddelanden som har allvarlighetsnivåer från 0 till 10.

Exempel

Här är ett exempel på hur kommandot körs och resultaten jag får på min nuvarande testmaskin:

DBCC USEROPTIONS;

Resultat:

+-------------------------+----------------+
| 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 |
+-------------------------+----------------+

Som nämnts kan du ändra dessa alternativ med SET uttalanden.

Här är ett exempel på att ändra språket för den aktuella sessionen och sedan köra kommandot igen:

SET LANGUAGE German;
DBCC USEROPTIONS;

Resultat:

+-------------------------+----------------+
| 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.

Så vi kan se att inte bara språket ändrades, utan även datumformatet.

Men om detta inte är det önskade datumformatet kan datumformatet explicit ändras med SET DATEFORMAT .

Så här:

SET DATEFORMAT mdy;
DBCC USEROPTIONS;

Resultat:

+-------------------------+----------------+
| 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 |
+-------------------------+----------------+

Och vi kan se att datumformatet har ändrats som specificerat, samtidigt som språket lämnas som det är.

Vyn sys.dm_exec_requests

Du kan också returnera datumformatet som används i den aktuella begäran genom att fråga sys.dm_exec_requests systemvy. Den här vyn returnerar ett stort gäng kolumner, men du kan begränsa den till endast de kolumner du är intresserad av. I vårt fall är vi bara intresserade av en kolumn – date_format kolumn:

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

Resultat:

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

Jag har också begränsat frågan till bara den aktuella begäran. Jag gjorde detta genom att använda @@SPID , som returnerar sessions-ID för den aktuella användarprocessen.


  1. Inkludera saknade månader i grupp efter fråga

  2. Hur får man aktuellt datum i PL/SQL?

  3. jQuery UI Sorterbart, skriv sedan ordning i en databas

  4. UNION-fråga med codeigniters aktiva postmönster