Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment trouver le format de date utilisé dans la session en cours dans SQL Server (T-SQL)

Lorsque vous utilisez SQL Server, votre connexion actuelle inclut un certain nombre d'options qui déterminent des éléments tels que la langue, les formats de date, etc. Celles-ci peuvent être définies sur la valeur par défaut, mais elles peuvent également être remplacées pendant la session en utilisant un SET déclaration.

Le format de date affecte l'interprétation des chaînes de caractères lorsqu'elles sont converties en valeurs de date pour le stockage dans la base de données. Lorsque la langue est définie à l'aide de SET LANGUAGE , le paramètre de format de date est implicitement défini en conséquence. Cela peut être explicitement remplacé avec le SET DATEFORMAT déclaration.

Dans tous les cas, vous pouvez trouver le format de date actuel en utilisant le DBCC USEROPTIONS commande. Cette commande renvoie le SET options définies pour la connexion en cours.

Syntaxe

La syntaxe ressemble à ceci :

DBCC USEROPTIONS  
[ WITH NO_INFOMSGS ]

Le NO_INFOMSGS facultatif supprime tous les messages d'information dont le niveau de gravité est compris entre 0 et 10.

Exemple

Voici un exemple d'exécution de la commande et les résultats que j'obtiens sur ma machine de test actuelle :

DBCC USEROPTIONS;

Résultat :

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

Comme mentionné, vous pouvez modifier ces options avec le SET déclarations.

Voici un exemple de modification de la langue de la session en cours, puis de réexécution de la commande :

SET LANGUAGE German;
DBCC USEROPTIONS;

Résultat :

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

Nous pouvons donc voir que non seulement la langue a changé, mais que le format de la date a également changé.

Cependant, si ce n'est pas le format de date souhaité, le format de date peut être explicitement modifié à l'aide de SET DATEFORMAT .

Comme ceci :

SET DATEFORMAT mdy;
DBCC USEROPTIONS;

Résultat :

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

Et nous pouvons voir que le format de la date a été modifié comme spécifié, tout en laissant la langue telle quelle.

La vue sys.dm_exec_requests

Vous pouvez également renvoyer le format de date utilisé dans la requête actuelle en interrogeant sys.dm_exec_requests vue système. Cette vue renvoie un bon gros tas de colonnes, mais vous pouvez la réduire aux seules colonnes qui vous intéressent. Dans notre cas, nous ne sommes intéressés que par une colonne - le date_format colonne :

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

Résultat :

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

J'ai également réduit la requête à la requête actuelle. Je l'ai fait en utilisant @@SPID , qui renvoie l'ID de session du processus utilisateur actuel.