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 :

Erreur conversion d'un type de données varchar en type de données datetime


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Erreur conversion d'un type de données varchar en type de données datetime
    Bonjour voici une nouvelle facétie de SQL Serveur version Française

    Je viens de chercher pendant un bon bout de temps pourquoi une requete qui fonctionne tres bien chez moi me donne un message d'erreur chez un utilisateur en France

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT 
    *
    FROM 
    Stock
    WHERE DateIN >= '2012-01-18'
    Citation Envoyé par ErrorMessage
    Msg*242, Niveau*16, État*3, Ligne*2
    La conversion d'un type de données varchar en type de données datetime a créé une valeur hors limites.
    Et je viens de découvrir l'HORREUR !
    La requete sur Date est dépendante du type d'installation du serveur !!

    Le serveur de l'utilisateur est installé en Français !

    Il faut alors faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE DateIN >= '18-01-2012'
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE DateIN >= '2012-01-18'
    Je pense et j'espère qu'avec une requete parametrée je devrais m'en sortir
    Mais je trouve cependant cela horrible !!

    J'ose a peine imaginer ce que doit donner un Back-Up restore entre les deux serveurs dans ce cas !!

    Vos remarque sur mon interpretation de ce problème sont les bienvenues

  2. #2
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Bonjour,

    Le format de la date dépend en effet de la langue utilisée pour l'installation.

    Pour voir la liste des différents formats par langue installée:
    Pour le francais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sp_helplanguage 'French'
    Pour modifier le comportement de la session, vous pouvez utiliser la commande suivante par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SET DATEFORMAT ymd
    Pour plus d'information, cette commande et le comportement que vous décrivez sont expliqués dans la MSDN

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par olibara Voir le message
    Bonjour voici une nouvelle facétie de SQL Serveur version Française
    Il ne s'agit pas d'une facétie, mais d'un comportement attendu et normatif.

    Le format normatif de conversion de STRING en DATETIME dans SQL Server repose sur la norme SQL qui imposait le format 'AAAAMMJJ hh:mm:ss.nnn'
    Ceci jusqu'à la norme SQL1999.

    Quelque soit les règles du serveur, ce format passe outre le paramétrage de langue.

    A partir de SQL Server 2008, qui a rajouté les type DATE, DATETIME2 et DATETIMEOFSSET, le format normatif ayant évolué, SQL Server prends désormais 'AAAA-MM-JJ ...' UNIQUEMENT pour les nouveaux types (afin de rester rétrocompatible).

    Si vous aviez cherché un peu, vous seriez tombé sur l'article que nous avons écrit à ce sujet :
    http://baptiste-wicht.developpez.com...-sql/datetime/

    Effectivement le paramétrage SET FORMAT permet de prendre en compte des format exotique de conversion STRING DATE.

    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/ * * * * *

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ou sinon, toujours écrire une date avec la fonction CONVERT, comme ça plus jamais de problème de localisation.

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci a tous !

  6. #6
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Bonjour

    A la suite de ce Post J'avais cru comprendre que le format d'interpretation generique d'une date etait

    Je je decouvre que l'import export wizard n'aime pas du tout cela et qu'il exige
    En résumé la regle depends toujours du contexte !!

  7. #7
    Membre actif
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : R&D

    Informations forums :
    Inscription : Avril 2004
    Messages : 127
    Par défaut
    Citation Envoyé par olibara Voir le message
    Bonjour
    Je je decouvre que l'import export wizard n'aime pas du tout cela et qu'il exige
    En résumé la regle depends toujours du contexte !!
    Par exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    convert(datetime, '2012-02-22 01:02:03', 121)

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par olibara Voir le message
    Bonjour

    A la suite de ce Post J'avais cru comprendre que le format d'interpretation generique d'une date etait

    Je je decouvre que l'import export wizard n'aime pas du tout cela et qu'il exige
    En résumé la regle depends toujours du contexte !!
    Visiblement vous ne savez pas lir !

    A relire : http://www.developpez.net/forums/d11...e/#post6477616

    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/ * * * * *

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je me permets de m'auto-citer :
    Citation Envoyé par Waldar Voir le message
    Ou sinon, toujours écrire une date avec la fonction CONVERT, comme ça plus jamais de problème de localisation.

  10. #10
    Membre confirmé Avatar de tequillaman
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2016
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 116
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Il ne s'agit pas d'une facétie, mais d'un comportement attendu et normatif.

    Le format normatif de conversion de STRING en DATETIME dans SQL Server repose sur la norme SQL qui imposait le format 'AAAAMMJJ hh:mm:ss.nnn'
    Ceci jusqu'à la norme SQL1999.

    Quelque soit les règles du serveur, ce format passe outre le paramétrage de langue.

    A partir de SQL Server 2008, qui a rajouté les type DATE, DATETIME2 et DATETIMEOFSSET, le format normatif ayant évolué, SQL Server prends désormais 'AAAA-MM-JJ ...' UNIQUEMENT pour les nouveaux types (afin de rester rétrocompatible).

    Si vous aviez cherché un peu, vous seriez tombé sur l'article que nous avons écrit à ce sujet :
    http://baptiste-wicht.developpez.com...-sql/datetime/

    Effectivement le paramétrage SET FORMAT permet de prendre en compte des format exotique de conversion STRING DATE.

    A +

    Bonjour,
    J'ai le même problème pour importer les dates de excel vers sql 2005. Le liens que tu met dans ta réponse ne fonctionne plus.

Discussions similaires

  1. Erreur de conversion du type de données varchar en bigint
    Par lacigale dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/01/2013, 10h03
  2. [Débutant] Erreur de conversion du type de données varchar en float
    Par nanox dans le forum C#
    Réponses: 2
    Dernier message: 02/12/2011, 11h53
  3. Réponses: 1
    Dernier message: 21/02/2011, 21h30
  4. [AC-2007] Erreur conversion type de données
    Par Rapheux dans le forum IHM
    Réponses: 1
    Dernier message: 12/06/2010, 18h31
  5. erreur conversion type de données 3421
    Par sunwind dans le forum VBA Access
    Réponses: 1
    Dernier message: 05/05/2008, 16h27

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