sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan finder du datoformatet, der bruges i den aktuelle session i SQL Server (T-SQL)

Når du bruger SQL Server, inkluderer din nuværende forbindelse en række muligheder, der bestemmer ting som sproget, datoformater osv. Disse kan indstilles til hvad standarden er, men de kan også tilsidesættes under sessionen ved at bruge en SET erklæring.

Datoformatet påvirker fortolkningen af ​​tegnstrenge, da de konverteres til datoværdier til lagring i databasen. Når sproget er indstillet med SET LANGUAGE , er datoformatindstillingen implicit indstillet i overensstemmelse hermed. Dette kan eksplicit tilsidesættes med SET DATEFORMAT erklæring.

Under alle omstændigheder kan du finde det aktuelle datoformat ved at bruge DBCC USEROPTIONS kommando. Denne kommando returnerer SET indstillinger, der er indstillet for den aktuelle forbindelse.

Syntaks

Syntaksen ser sådan ud:

DBCC USEROPTIONS  
[ WITH NO_INFOMSGS ]

Den valgfri NO_INFOMSGS argument undertrykker alle informationsmeddelelser, der har sværhedsgrader fra 0 til 10.

Eksempel

Her er et eksempel på at køre kommandoen og de resultater, jeg får på min nuværende testmaskine:

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ævnt kan du ændre disse muligheder med SET udsagn.

Her er et eksempel på at ændre sproget for den aktuelle session og derefter køre kommandoen 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, at ikke kun sproget ændrede sig, men også datoformatet ændrede sig.

Men hvis dette ikke er det ønskede datoformat, kan datoformatet eksplicit ændres ved hjælp af SET DATEFORMAT .

Sådan:

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

Og vi kan se, at datoformatet er blevet ændret som angivet, mens sproget er som det er.

Sys.dm_exec_requests-visningen

Du kan også returnere det datoformat, der bruges i den aktuelle anmodning, ved at forespørge på sys.dm_exec_requests systemvisning. Denne visning returnerer en pæn stor flok kolonner, men du kan indsnævre den til kun de kolonner, du er interesseret i. I vores tilfælde er vi kun interesseret i én kolonne – date_format kolonne:

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

Resultat:

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

Jeg indsnævrede også forespørgslen til kun den aktuelle anmodning. Jeg gjorde dette ved at bruge @@SPID , som returnerer sessions-id'et for den aktuelle brugerproces.


  1. PostgreSQL-udløsere og grundlæggende funktioner i lagrede funktioner

  2. Hent id fra en betinget INSERT

  3. Hjælp venligst med STRING_SPLIT-forbedringer

  4. Sådan eksporteres forespørgselsresultater til en CSV-fil i SQL Developer (Oracle)