Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Requête SQL : date au format américain [ SQL Server, MSDE, SQL Express / Requêtes ] (Molenn)

vendredi 8 février 2008 à 10:00:56 | Requête SQL : date au format américain

Molenn

Bonjour,

J'ai longtemps hésité entre le forum VB et celui SQL ... J'espère avoir fait le bon choix
Je pose vite fait mon problème :

Une base SQL Server sur un serveur distant. Une des innombrables tables contient entre autre une date (date d'ouverture d'un dossier). Lorsque je tente d'extraire via VBA cette date, je l'obtiens au format américain (c'est à dire mm/dd/yyyy) dans mon fichier Excel, mais Excel lui, considère le résultat comme un format européen (soit dd/mm/yyyy).
En résumé, j'extrais une date qui est le 07/02/2008 et j'obtiens dans mon fichier 02/07/2008.

J'ai été voir sur le serveur, via un accès TS et l'analyseur de requête : les dates quand je consulte la table sont stockées sous la forme dd/mm/yyyy hh:mm
Je n'ai pas accès au panneau de config du serveur, mais je suppose donc que les paramètres régionaux sont français.
Les paramètres sur mon poste sont français eux aussi.

Lorsque je tente d'extraire à partir de mon fichier Excel :
En VBA donc, via la création d'un aobjet ADO et donc d'un Recordset, ça ne fonctionne plus.
Ce que je fais :

SQL = "SELECT DateOuverture FROM MaTable WHERE Dossier='xxxxx'"
Code d'ouverture du recordset, etc ...
Je lis le contenu de mon recordset : Rs.field("DateOuverture ").value et là, la date est 02/07/2008
J'ai essayé d'appliquer plein de format à mon résultat (entre autre Format("dd/mm/yyyy", rs.field ...), ça ne fonctionne pas. Extraire le mois de mon résultat, mais : month(rs.field...) = 7 et non 2 comme ça devrait l'être.

Par contre, si je modifie ma requête SQL de la façon suivante :
SQL = "SELECT month(DateOuverture) FROM MaTable WHERE Dossier='xxxxx'"
Quand j'interroge le recordset, j'obtiens bien en résultat 2 pour le mois de février.

1° Si quelqu'un pouvait m'expliquer ce mystère, merci
2° Pour résoudre mon pb, je pense qu'il faut que je modifie donc le contenu de ma requête SQL (ce qui explique pourquoi je poste ici plutôt que sur le forum VB)
Je ne peux pas faire
SQL = "SELECT day(DateOuverture),month(DateOuverture),year(DateOuverture) FROM MaTable WHERE Dossier='xxxxx'"
Ca ne m'arrange pas, j'ai fini mon programme, et insérer des colonnes supplémentaires (j'ai 3 dates dans le même cas) me ferait reprendre trop de choses
J'ai bien essayé de faire un day(DateOuverture)+'/'+month(DateOuverture)+"/"+year(DateOuverture) pour reconsituer la date dans un seul champ, mais ça ne fonctionne pas. Sans doute parce que le type de champ est Date/heure et que le résultat de mes fonctions sont des Entiers.
J'ai aussi essayé de bricoler avec des Convert et Cast, mais Convert(datetime,DateOuverture,103) ne fonctionne pas et me sort continuellement un 02/07/2008.

J'avoue que je sèche et n'étant pas très doué en SQL Server (j'apprends sur le tas, aucune formation, donc, vive google et l'aide en ligne), je ne vois pas comment rédiger ma requête pour obtenir ce que je veux.

J'espère n'avoir pas été trop brouillon dans mes explications, et merci d'avance à qui m'aidera à résoudre mon problème.

Molenn

vendredi 8 février 2008 à 10:43:16 | Re : Requête SQL : date au format américain

pneau

Membre Club
Réponse acceptée !
salut,
essaie, dans ta requete, d'utiliser la fonction "CONVERT", elle te permet de récupérer une chaine formattée suivant ce que tu désire

ex
select convert(varchar(10),getdate(),103) te donnera 08/02/2008
select convert(varchar(10),getdate(),112) te donnera 20080208

la doc précise sur CONVERT est ici

cordialement

Pat

 Don't Worry , Be Happy


lorsque le problème est résolu, pensez Réponse Acceptée

vendredi 8 février 2008 à 14:10:48 | Re : Requête SQL : date au format américain

Molenn

Je l'avais déjà essayé, mais par acquis de conscience, j'ai recommencé :

Quand je fais un
SELECT convert(varchar(10),DateOuverture,103) FROM MaTable ...
La date remontée n'est pas bonne.

J'avoue que là, je commence à ne plus trop avoir de cheveux ^^

Molenn

vendredi 8 février 2008 à 14:21:53 | Re : Requête SQL : date au format américain

pneau

Membre Club
re,
tu as quoi comme donnée dans la base et tu as quoi comme résultat ?

Pat

 Don't Worry , Be Happy


lorsque le problème est résolu, pensez Réponse Acceptée

vendredi 8 février 2008 à 15:09:00 | Re : Requête SQL : date au format américain

Molenn

Quand je vais voir dans la table (par Entreprise Manager sur le serveur), je crée une requête toute simple :

SELECT DateOuverture FROM MaTable WHERE Num='xxx'
La réponse affichée est :
01/02/2007 08:23:58
(j'ai changé de dossier, mais le principe est le même ^^)


Maintenant, via mon fichier EXCEL, après récupération dans un recordset, j'affiche : 

SELECT convert(varchar(10),DateOuverture,103) FROM MaTable
   => 02/01/2007

Par contre, j'ai vu ça par hasard, en testant tout et n'importe quoi pour voir, si au lieu de prendre comme la logique le voudrait 103 pour le format européen, je prends 110 (qui est le format US), j'obtiens :

SELECT convert(varchar(10),DateOuverture,110) FROM MaTable
   => 01/02/2007
qui est le résultat que je veux obtenir O_o


Par curiosité, le test avec tous les codes
101 : 01/02/2007   USA   Ok
102 : 2007.02.01   ANSI   Ok
103 : 02/01/2007   Anglais/Français   Nok
104 : 01.02.2007   Allemand   Ok
105 : 02/01/2007   Italien   Nok
110 : 01/02/2007   USA   Ok
111 : 01/02/2007   Japon   Ok
112 : 20070201      Iso   Ok
113 : 01 févr 20   Valeur par défaut Europe   Ok (pas tout l'affichage car varchar(10)

Pourquoi l'Allemand correspond bien à ce qu'il est sensé remonter, et pas l'italien et le français ?
Pourquoi les codes USA me remontent ce que j'attends, à l'inverse de ce qu'ils sont sensés me remonter ?
Pourquoi le Japon ne remonte pas ce qu'il devrait ?

J'avoue que je suis très perplexe sur le pourquoi de la chose. Je vais coller avec le code 100 dans mon programme puisqu'à apparemment, ça fonctionne, mais j'avour qu'intellectuellement parlant, c'est pas satisfaisant du tout.

Molenn


vendredi 8 février 2008 à 15:26:58 | Re : Requête SQL : date au format américain

pneau

Membre Club
et si tu lance la requete dans un analyser de requete (isqlw par ex), cela donne quoi ?
as tu vérifier tes formats dates courtes et dates longues dans les param régionaux ?
as tu vérifier la langue sélectionnée de ton windows par défaut ?
a mon avis cela vient de ton poste car il n'y a aucune raison qu'il ne te renvoie pas ce qu'il faut. a moins que ce soit la donnée de te table qui est inversée ? ex tu as 01/02/2007 et tu penses que 01 = JJ, 02 = MM et 2007 = AAAA
alors que peut être c'est 01 = MM, 02 = JJ et 2007 = AAAA.
dans ce cas, la fonction ne foncionne pas "à l'envers". As tu moyen de vérifier avec des données de ta table dont le jour est > 12 ?


Pat

 Don't Worry , Be Happy


lorsque le problème est résolu, pensez Réponse Acceptée

vendredi 8 février 2008 à 15:42:59 | Re : Requête SQL : date au format américain

Molenn

Sur mon poste, mes paramètres régionaux :
Date courte : jj/MM/aaaa
Date longue : jjjj j MMMM aaaa
Langue : français (france)

Tout m'a l'air correct.
J'attaque directement la base de données d'une appli qu'on utilise, et dans l'appli, la date est bien 01/02/2007 08:23:58
Donc, à priori, ce n'est pas un pb d'interprétation de ma part (mais je reconnais que j'y ai pensé moi aussi :p)

Il me reste un problème : Je ne sais pas et je ne peux pas savoir quels sont les paramètres régionaux du serveur. Je ne vois plus que ça qui pourrait poser problème.

Mais bon, en mettant 110, ça fonctionne ... Je crois que je vais abandonner et me contenter de ça. Je n'ai pas beaucoup plus de temps à consacrer à ce projet.


Oui oui, j'avais vérifié avec des dates supérieures au 12 (j'ai 4 ans de données à disposition), en fait, mon programme est terminé depuis mi janvier et à cette période là, tout fonctionnait nickel. On m'a remonté le bug début février. Je n'avais pas fait attention avant à ce problème de date (surtout que dans mon code VB, j'avais pourtant pris la précaution d'encadrer ma date d'un Format("dd/mm/yyyy", Date) ...).

Les joies et les mystères de l'informatique ^^

Molenn


vendredi 8 février 2008 à 15:54:57 | Re : Requête SQL : date au format américain

pneau

Membre Club
ben tant pis alors...
si un jour tu trouves l'explication... n'hésites pas à partager...
courage... la force est avec toi...
@+

Pat

 Don't Worry , Be Happy


lorsque le problème est résolu, pensez Réponse Acceptée



Cette discussion est classé dans : date, sql, format, requête, dateouverture


Répondre à ce message

Sujets en rapport avec ce message

[SQL Server 2005] problème heure au format 12h [ par sdisp ] Bonjour.J'ai un soucis avec une requête sur un serveur SQL Serveur 2005 sous Windows 2003 Serveur US.Je m'explique, j'ai un champ de type datetime (ma [SQL] date - n heures [ par remifalcon ] Bonjour, après avoir chercher différents tuto, je viens vers vous pour ce problème:Je cherche à faire une requète SQL me renvoyant toutes les lignes ( Requête SQL via LUA [ par kopierreko ] Bonjour, est-ce que quelqu'un sait comment exécuter une requête sql via un fichier lua ??Car je cherche à récupérer le dernier enregistrement d'une ta [SSIS] Requete SQL [ par sdisp ] Bonjour.Je souhaite via SSIS:- exécuter une requête SQL (je souhaite que la requête soit une variable)- créer un fichier texte contenant le résultat d Resource id #13 [ par raurau ] Bonjour à tousAprés cette requete, j'ai ce message : Resource id #13Je ne comprends pasVoici la requeterequire ("../include/baseassoc.inc"); la Date la plus recente (Sql Access) [ par vortex11 ] bonjours a tous! je me permet de vous pose cette kestion  pt'etre debile mais bon:: est ce k il existe sous  sql/access un fonction  pour faire ressor SQL 2005 Reporting [ par winterburd ] Bonjour,J'ai un gros problème sur un serveur de PROD.Lorsqu'un utilisateur lance un REPORTING au format Excel (Export) le serveur part dans les tours Problème pour aborder une requête d'UPDATE en sql sous Access [ par Famas54 ] Bonjour,Je suis en plein dans la conception d'une requête dont je n'ai pas trop idée du résultat en terme de code SQL pour le moment.En somme, je rech Problème SQL TQuery [ par corole3 ] Probleme avec un TQuery + requetes Bonsoir, j'arrive à envoyer  ma requête à ma base via SQL explorer, tout fonctionne. Si je met ma requête d Enregistrement suivant [ par Farfadh ] Je souhaite connaitre l'enregistrement suivant à partir d'un enregistrement donné selon un ordre chronologique. Le problème parait être simple, mais e


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,17 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.