IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Besoin d'aide fonction Date


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 817
    Billets dans le blog
    2
    Par défaut Besoin d'aide fonction Date
    Bonjour

    je veux s'avoir pourquoi la fonction YEAR renvoi la valeur 2015 alors que la fonction month renvoi une valeur correcte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DECLARE @dt DATE = '1-1-15'
    SELECT MONTH(@dt), YEAR(@dt)
    alors que cette requêtes renvoi une valeur 1 pour la fonction year

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DECLARE @dt DATE = '0001-1-15'
    SELECT MONTH(@dt), YEAR(@dt)
    Donc c'est quoi la différence entre les deux

  2. #2
    Membre éclairé
    Homme Profil pro
    Chef de projet BI
    Inscrit en
    Août 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chef de projet BI

    Informations forums :
    Inscription : Août 2013
    Messages : 42
    Par défaut
    Bonjour,

    Dans la seconde requête, la première série de chiffre ayant 4 caractères elle est considérée comme l'année (comme en chinois simplifié par exemple).
    On l'observe bien avec cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DECLARE @dt DATE = '0001-1-15'
    SELECT FORMAT(@dt,'dd/MM/yyyy')
    Retourne : 15/01/0001

    Alors que pour la première, la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DECLARE @dt DATE = '1-1-15'
    SELECT FORMAT(@dt,'dd/MM/yyyy')
    Retourne : 01/01/2015

    Jonathan

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    En résumé, il ne faut jamais laisser le SGBD décider seul de la manière dont il convertira une chaine en date mais toujours lui préciser le format pour ne pas avoir de (mauvaise) surprise.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    Afin de s'affranchir de la culture et des paramètres de session DATEFORMAT, LANGUAGE etc. il est fortement conseillé, d'utiliser le format ISO 8601 pour exprimer, de manière littérale, les constantes DATE
    Pour les dates le format ISO 8601 est le suivant : yyyy-mm-dd

    Exemple
    Pour exprimer la date du "15 janvier l'an 1"
    utilisez le littéral '0001-01-15'

    Pour exprimer la date du "15 janvier 2015"
    Utilisez le littéral '2015-01-15'

    En dehors du format ISO 8601, l'interprétation du littéral Date est hasardeuse et peut même parfois générer des erreurs comme le montre l'exemple ci-dessous :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SET DATEFORMAT dym 
    DECLARE @dt DATE = '1-1-15'
    SELECT MONTH(@dt), YEAR(@dt)
    Résulat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg*241, Niveau*16, État*1, Ligne*2
     Échec de la conversion de la date et/ou de l'heure à partir d'une chaîne de caractères.
    A+

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par hmira Voir le message
    Afin de s'affranchir de la culture et des paramètres de session DATEFORMAT, LANGUAGE etc. il est fortement conseillé, d'utiliser le format ISO 8601 pour exprimer, de manière littérale, les constantes DATE
    Pour les dates le format ISO 8601 est le suivant : yyyy-mm-dd
    Oui, dans ce cas, s'assurer aussi d'utiliser les nouveaux types de date et heure, typiquement DATETIME2 au lieu de DATETIME, celui-ci, contrairement à celui-là, étant sensible au DATEFORMAT.

    ou bien encore, utiliser le format de base de la norme : yyyymmdd

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Oui, dans ce cas, s'assurer aussi d'utiliser les nouveaux types de date et heure, typiquement DATETIME2 au lieu de DATETIME, celui-ci, contrairement à celui-là, étant sensible au DATEFORMAT.

    ou bien encore, utiliser le format de base de la norme : yyyymmdd
    Oui, et il ne faut pas oublier, le cas échéant, d'utiliser également le nouveau type DATE (3 octets) au lieu de DATETIME2 (8 ou 7 ou 6 octets selon la précision choisie) lorsque la colonne représente uniquement le jour (un jour J sans les heures, minutes, secondes, etc.. ).

    A+

Discussions similaires

  1. [AC-2010] Besoin d'aide au niveau de la fonction Date/Heure
    Par fredyemon dans le forum Access
    Réponses: 8
    Dernier message: 04/02/2014, 21h36
  2. [AC-2010] Besoin d'aide au niveau de la fonction Date/Heure
    Par fredyemon dans le forum Access
    Réponses: 1
    Dernier message: 24/01/2014, 15h27
  3. [XL-2007] Besoin d'aide fonction recherchev Excel 2007
    Par pressidor dans le forum Conception
    Réponses: 1
    Dernier message: 09/06/2012, 18h38
  4. [XL-2007] Bonsoir besoin d'aide fonction =si
    Par scoubi77 dans le forum Excel
    Réponses: 2
    Dernier message: 24/06/2010, 07h53
  5. besoin d'aide fonction avec fichier (debutant)
    Par boby61 dans le forum Débuter
    Réponses: 9
    Dernier message: 14/03/2005, 11h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo