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 :

Problème de format de date


Sujet :

Développement SQL Server

  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut Problème de format de date
    Bonjour,

    Voici un problème que je qualifierais du troisième type ...

    Nom : 2019-02-28_18h05_55.png
Affichages : 5932
Taille : 27,7 Ko

    Comme vous pouvez le constater j'ai tenté de requêter cette table du 10 au 11 janvier 2017. La deuxième version de ma requête est juste un changement de ORDER BY.

    Et comme vous pouvez le constater la Base d'Audit (SAP Business Objects) me ramène des résultats entre le 1er octobre et le 1er novembre !

    Une idée ?

    Je suis bien sûr en contact également avec le Support SAP, mais pour l'instant il botte en touche ...

  2. #2
    Invité
    Invité(e)
    Par défaut
    Ça ressemble à problème de formatage US vs Fr...

    Si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    between CAST('2017-01-10' as DATETIME) and CAST('2017-01-11' as DATETIME)
    Est-ce que c'est mieux ?

    Sinon, c'est quoi le type de ta colonne ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut
    Pas mieux ...

    Le type de cette colonne : datetime.

    Et pour info, ce SQL Server est en classement French_CI_AS et en langue Français (France). Et toutes mes Bases sont sur une même et unique instance.

  4. #4
    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
    bonjour

    Utilisez le format ISO pour les littéraux date : '2017-10-01T00:00:00',

    Vous pouvez aussi modifier le format de date avec SET DATEFORMAT, mais attention aux effets de bords sur l'existant.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 986
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    bonjour

    Utilisez le format ISO pour les littéraux date : '2017-10-01T00:00:00',

    Vous pouvez aussi modifier le format de date avec SET DATEFORMAT, mais attention aux effets de bords sur l'existant.
    Non, pas tout à fait.....

    Le format ISO SQL était AAAAMMJJ hh:mm:ss.nnnnnnnn... avant la norme de 1999.
    Si le type est du DATETIME, donc créé avant la norme, il faut utiliser cette expression.
    À partir de la norme SQL 1999, le format est devenu AAAA-MM-JJ hh:mm:ss.nnnnnnnn...
    Pour les dates exprimées dans du XML, le format ISO est AAAA-MM-JJThh:mm:ss.nnnnnnnn... l'expace étant remplacé par le T

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 207
    Par défaut
    Bonjour,

    Je ne suis pas un grand spécialiste de SQL serveur mais si tu regardes mon post d'hier, j'ai eu aussi un problème d'inversion entre le mois et jour dans une date.

    Et ceci provenait de la différence de langue entre ce que tu écris dans ta requête et ton système.

    Soit tu inverses les mois et les jours dans ta requête.

    Soit tu modifie la langue de ton système :
    - avec ça : SET DATEFORMAT dmy;
    - ou peut-être aussi regarde la langue du user sur lequel tu es connecté à SQL server

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 986
    Billets dans le blog
    6
    Par défaut
    Les formats que je vous ai donné fonctionnent dans tous les cas de figures indépendamment du réglage de culture.

    Démonstration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    DECLARE @DT DATETIME, @DT2 DATETIME2;
     
    SET LANGUAGE Français;
    SET @DT = '20011231 23:59:59.987';
    SET @DT2 = '2001-12-31 23:59:59.9876543';
    SELECT @DT AS DATHEURE_ISO_COURT, @DT2 DATHEURE_ISO_COURT;
    /*
    DATHEURE_ISO_COURT      DATHEURE_ISO_COURT
    ----------------------- ---------------------------
    2001-12-31 23:59:59.987 2001-12-31 23:59:59.9876543
    */
     
    SET LANGUAGE English;
    SET @DT = '20011231 23:59:59.987';
    SET @DT2 = '2001-12-31 23:59:59.9876543';
    SELECT @DT AS DATHEURE_ISO_COURT, @DT2 DATHEURE_ISO_COURT;
    /*
    DATHEURE_ISO_COURT      DATHEURE_ISO_COURT
    ----------------------- ---------------------------
    2001-12-31 23:59:59.987 2001-12-31 23:59:59.9876543
    */
     
    SET LANGUAGE Dansk;
    SET @DT = '20011231 23:59:59.987';
    SET @DT2 = '2001-12-31 23:59:59.9876543';
    SELECT @DT AS DATHEURE_ISO_COURT, @DT2 DATHEURE_ISO_COURT;
    /*
    DATHEURE_ISO_COURT      DATHEURE_ISO_COURT
    ----------------------- ---------------------------
    2001-12-31 23:59:59.987 2001-12-31 23:59:59.9876543
    */
     
    SET LANGUAGE Czech;
    SET @DT = '20011231 23:59:59.987';
    SET @DT2 = '2001-12-31 23:59:59.9876543';
    SELECT @DT AS DATHEURE_ISO_COURT, @DT2 DATHEURE_ISO_COURT;
    /*
    DATHEURE_ISO_COURT      DATHEURE_ISO_COURT
    ----------------------- ---------------------------
    2001-12-31 23:59:59.987 2001-12-31 23:59:59.9876543
    */
     
    SET LANGUAGE Turkish;
    SET @DT = '20011231 23:59:59.987';
    SET @DT2 = '2001-12-31 23:59:59.9876543';
    SELECT @DT AS DATHEURE_ISO_COURT, @DT2 DATHEURE_ISO_COURT;
    /*
    DATHEURE_ISO_COURT      DATHEURE_ISO_COURT
    ----------------------- ---------------------------
    2001-12-31 23:59:59.987 2001-12-31 23:59:59.9876543
    */
     
    SET LANGUAGE Japanese;
    SET @DT = '20011231 23:59:59.987';
    SET @DT2 = '2001-12-31 23:59:59.9876543';
    SELECT @DT AS DATHEURE_ISO_COURT, @DT2 DATHEURE_ISO_COURT;
    /*
    DATHEURE_ISO_COURT      DATHEURE_ISO_COURT
    ----------------------- ---------------------------
    2001-12-31 23:59:59.987 2001-12-31 23:59:59.9876543
    */
     
    SET LANGUAGE [Traditional Chinese];
    SET @DT = '20011231 23:59:59.987';
    SET @DT2 = '2001-12-31 23:59:59.9876543';
    SELECT @DT AS DATHEURE_ISO_COURT, @DT2 DATHEURE_ISO_COURT;
    /*
    DATHEURE_ISO_COURT      DATHEURE_ISO_COURT
    ----------------------- ---------------------------
    2001-12-31 23:59:59.987 2001-12-31 23:59:59.9876543
    */
     
    SET LANGUAGE Korean;
    SET @DT = '20011231 23:59:59.987';
    SET @DT2 = '2001-12-31 23:59:59.9876543';
    SELECT @DT AS DATHEURE_ISO_COURT, @DT2 DATHEURE_ISO_COURT;
    /*
    DATHEURE_ISO_COURT      DATHEURE_ISO_COURT
    ----------------------- ---------------------------
    2001-12-31 23:59:59.987 2001-12-31 23:59:59.9876543
    */
     
    SET LANGUAGE [Simplified Chinese];
    SET @DT = '20011231 23:59:59.987';
    SET @DT2 = '2001-12-31 23:59:59.9876543';
    SELECT @DT AS DATHEURE_ISO_COURT, @DT2 DATHEURE_ISO_COURT;
    /*
    DATHEURE_ISO_COURT      DATHEURE_ISO_COURT
    ----------------------- ---------------------------
    2001-12-31 23:59:59.987 2001-12-31 23:59:59.9876543
    */
     
    SET LANGUAGE Arabic;
    SET @DT = '20011231 23:59:59.987';
    SET @DT2 = '2001-12-31 23:59:59.9876543';
    SELECT @DT AS DATHEURE_ISO_COURT, @DT2 DATHEURE_ISO_COURT;             
    /*
    DATHEURE_ISO_COURT      DATHEURE_ISO_COURT
    ----------------------- ---------------------------
    2001-12-31 23:59:59.987 2001-12-31 23:59:59.9876543
    */
     
    SET LANGUAGE Thai;
    SET @DT = '20011231 23:59:59.987';
    SET @DT2 = '2001-12-31 23:59:59.9876543';
    SELECT @DT AS DATHEURE_ISO_COURT, @DT2 DATHEURE_ISO_COURT;                   
    /*
    DATHEURE_ISO_COURT      DATHEURE_ISO_COURT
    ----------------------- ---------------------------
    2001-12-31 23:59:59.987 2001-12-31 23:59:59.9876543

    N'utilisez jamais que ces formats et rien d'autre ! L'utilisateur pouvant changer de culture sans vous prévenir !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 942
    Par défaut
    La fonction CONVERT() est plus lourde mais fonctionne bien aussi

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 986
    Billets dans le blog
    6
    Par défaut
    Elle n'est pas du tout destinée à cela, mais à l'inverse : fournir des chaines de caractères aux format exotiques depuis des données temporelles.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  10. #10
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 942
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Elle n'est pas du tout destinée à cela, mais à l'inverse
    Ah bon !
    Ben comment tu fais lorsque tu ne veux insérer une date SANS utiliser la conversion implicite ?

    Faudra le dire à Microsoft de changer sa doc alors
    https://docs.microsoft.com/fr-fr/sql...ql-server-2017

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 986
    Billets dans le blog
    6
    Par défaut
    Dans son cas il écrit lui même les requêtes... Il doit donc écrire les dates avec le bon format dès le départ.

    S'il écrit dans un format spécifique à une langue et que l'application ou le serveur est porté dans un environnement autre, alors la requête ne marchera plus.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  12. #12
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 942
    Par défaut
    Oups, répondu trop vite

    Pour utiliser la fonction CONVERT() sans ambiguïté il eut fallu faire quelque chose de pas beau du tout comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Where CONVERT(char(18),Start_time,120) = '2008-01-10 00:00:00'
    A ne pas faire, nous sommes bien d'accord.

    Bon, reprenons.
    Si on veut lever l’ambiguïté avec des fonctions on aurait pu utiliser :
    FORMAT() pour vérifier que la date affichée est correcte
    DATETIMEFROMPARTS ( year, month, day, hour, minute, seconds, milliseconds ) pour s'assurer de la bonne conversion

    ce qui donne la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Start_time, format(Start_time, 'ddd d MMM YYYY') as dte
    From bi4audit.dbo.ADS_EVENT
    WHERE Start_time >= DATETIMEFROMPARTS ( 2017, 01, 10, 00, 00, 00, 0 )
    and Start_time < DATETIMEFROMPARTS ( 2017, 01, 12, 00, 00, 00, 0 )
    +1 a SQLpro

  13. #13
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 986
    Billets dans le blog
    6
    Par défaut
    Ou plus simple ISDATE(…), TRY_CONVERT(…)

    Mais, dans tous les cas, tu ne peut pas lever une ambiguïté du style :
    2018-06-05... est-ce le 5 juin ou le 6 mai ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  14. #14
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 942
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    2018-06-05... est-ce le 5 juin ou le 6 mai ?
    En suivant la syntaxe :
    DATETIMEFROMPARTS ( year, month, day, hour, minute, seconds, milliseconds )
    y a pas de doute possible.

    C'est quand même plus long à écrire que '20180605'

  15. #15
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Non, pas tout à fait.....

    Le format ISO SQL était AAAAMMJJ hh:mm:ss.nnnnnnnn... avant la norme de 1999.
    Si le type est du DATETIME, donc créé avant la norme, il faut utiliser cette expression.
    À partir de la norme SQL 1999, le format est devenu AAAA-MM-JJ hh:mm:ss.nnnnnnnn...
    Pour les dates exprimées dans du XML, le format ISO est AAAA-MM-JJThh:mm:ss.nnnnnnnn... l'expace étant remplacé par le T

    A +
    Bonjour,

    Mon problème est que je ne peux pas retoucher la date de ma requête puisqu'elle est générée par Business Objects !

    Concernant le format, je constate ça :

    KO (requête d'origine) => La conversion d'un type de données varchar en type de données datetime a créé une valeur hors limites.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT top 1 Event_ID, Start_Time FROM ADS_EVENT WHERE Start_Time < '2017-05-31 00:00:00' 
    order by Start_Time desc


    KO également ... malgré le respect de la norme !? => Échec de la conversion de la date et/ou de l'heure à partir d'une chaîne de caractères.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT top 1 Event_ID, Start_Time FROM ADS_EVENT WHERE Start_Time < '2017-05-31 00:00:00.0000000' 
    order by Start_Time desc


    OK !
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT top 1 Event_ID, Start_Time FROM ADS_EVENT WHERE Start_Time < '2017-05-31T00:00:00' 
    order by Start_Time desc

    OK, malgré le nom respect de la norme !
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT top 1 Event_ID, Start_Time FROM ADS_EVENT WHERE Start_Time < '20170531 00:00:00' 
    order by Start_Time desc

  16. #16
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 942
    Par défaut
    Citation Envoyé par ghohm Voir le message
    Mon problème est que je ne peux pas retoucher la date de ma requête puisqu'elle est générée par Business Objects !
    Si la requête est mal faite depuis BO c'est que BO est mal paramétré, non ?

  17. #17
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 986
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par ghohm Voir le message
    Bonjour,

    Mon problème est que je ne peux pas retoucher la date de ma requête puisqu'elle est générée par Business Objects !

    Concernant le format, je constate ça :

    KO (requête d'origine) => La conversion d'un type de données varchar en type de données datetime a créé une valeur hors limites.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT top 1 Event_ID, Start_Time FROM ADS_EVENT WHERE Start_Time < '2017-05-31 00:00:00' 
    order by Start_Time desc


    KO également ... malgré le respect de la norme !? => Échec de la conversion de la date et/ou de l'heure à partir d'une chaîne de caractères.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT top 1 Event_ID, Start_Time FROM ADS_EVENT WHERE Start_Time < '2017-05-31 00:00:00.0000000' 
    order by Start_Time desc


    OK !
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT top 1 Event_ID, Start_Time FROM ADS_EVENT WHERE Start_Time < '2017-05-31T00:00:00' 
    order by Start_Time desc

    OK, malgré le nom respect de la norme !
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT top 1 Event_ID, Start_Time FROM ADS_EVENT WHERE Start_Time < '20170531 00:00:00' 
    order by Start_Time desc

    Vous ne m'avez pas bien lu….
    1) si type DATETIME donc antérieure à la norme de 1999 alors, format AAAAMMJJ
    2) si type DATETIME2 ou DATE ou DATETIEMOFFSET donc postérieure à la norme de 1999, alors format AAAA-MM-JJ


    Comme vous n'indiquez pas le type SQL de la colonne ADS_EVENT, vos tests ne valent rien ! Je soupçonne cependant d'être du type DATETIME.
    De plus le type DATETIME est déconseillé :
    Nom : SQL_server_DATETIME.jpg
Affichages : 3223
Taille : 77,8 Ko

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [débutant]Probléme de format de date
    Par Greg84 dans le forum Access
    Réponses: 2
    Dernier message: 10/08/2006, 14h31
  2. Problème de format de date par défaut
    Par anitshka dans le forum Langage
    Réponses: 4
    Dernier message: 31/07/2006, 12h22
  3. Problème de format de date
    Par pilou0013 dans le forum Access
    Réponses: 2
    Dernier message: 11/06/2006, 22h56
  4. [VB.net] problème de format de date
    Par cladsam dans le forum Windows Forms
    Réponses: 4
    Dernier message: 11/10/2005, 18h27
  5. Problème de Format de date
    Par titititi007 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/06/2003, 08h19

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