Précédent   Forum du club des développeurs et IT Pro > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/07/2010, 12h47   #1
witch
Membre confirmé
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 211
Points : 211
Envoyer un message via MSN à witch
Par défaut Convertir une date de format alphabétique en une date de format numérique

Bonjour,

exemple :
Code :
1
2
3
4
5
6
7
8
 
SELECT convert(varchar,convert(varchar,'Jan  9 1956 12:00AM',100),103) => ça renvoie 'Jan  9 1956 12:00AM'
SELECT convert(varchar,cast('Jan  9 1956 12:00AM' AS datetime) ,103) => ça renvoie Erreur de conversion 
 
SET DATEFORMAT DMY
SELECT datepart(year,'23/09/2010') 'YEAR', datepart(month,'23/09/2010') 'Month', datepart(day,'23/09/2010') 'Day'
SET DATEFORMAT MDY
SELECT datepart(year,'Mar 11 1951 12:00AM') 'YEAR', datepart(month,'Jan  9 1956 12:00AM') 'Month', datepart(day,'23/09/2010') 'Day' =>renvoie Erreur de conversion
la valeur est considérée comme une chaine de caractère, comment peut on faire comprendre au système qu'il s'agit d'une date?

pour l'instant je fais par exemple :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT  (
substring('Mar 11 1951 12:00AM',5,2)+'/'+
case  substring('Mar 11 1951 12:00AM',1,3) 
when 'Jan' then '01' 
when 'Fev' then '02' 
when 'Mar' then '03' 
when 'Apr' then '04' 
when 'Mai' then '05' 
when 'Jun' then '06' 
when 'Jul' then '07' 
when 'Aug' then '08' 
when 'Sep' then '09' 
when 'Oct' then '10' 
when 'Nov' then '11' 
when 'Dec' then '12' 
End +'/'+
substring('Mar 11 1951 12:00AM',8,4)) 
AS datetime
je n'aime pas beaucoup ça, y a t-il un moyen de conversion plus pratique?

++
__________________
If a pretty poster and a cute saying are all it takes to motivate you, you probably have a very easy job. The kind robots will be doing soon.
witch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2010, 13h39   #2
Philippe Robert
Membre actif
 
Inscription : janvier 2008
Messages : 236
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 236
Points : 165
Points : 165
C'est un problème de code langue.

Exécute ce code :

Code :
1
2
3
4
 
DECLARE @Date AS datetime
SET @date = '01/02/2010 00:00'
SELECT CONVERT(varchar, @date,0)
Si ton SQL server est en français, le résultat sera févr 1 2010 12:00AM

Si tu exécute ensuite :

Code :
1
2
 
SELECT CONVERT(datetime, 'févr 01 2010 00:00AM',100)
Tu obtients 2010-02-01 00:00:00.000.

"févr" est bien interprété, mais pas "feb" (de l'anglais february) qui n'est pas reconnu.
Philippe Robert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2010, 15h22   #3
witch
Membre confirmé
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 211
Points : 211
Envoyer un message via MSN à witch
Bonjour Philippe,

tu as raison, le system est français mais la date que je dois convertir est en anglais, y a t-il un moyen de faire avec? en changeant par exemple la langue utilisé sur le serveur? existe t-il peut être une procédure système à utiliser pour ça?
__________________
If a pretty poster and a cute saying are all it takes to motivate you, you probably have a very easy job. The kind robots will be doing soon.
witch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2010, 15h29   #4
Philippe Robert
Membre actif
 
Inscription : janvier 2008
Messages : 236
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 236
Points : 165
Points : 165
Dois-tu lire des données depuis un fichier texte ?
Philippe Robert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2010, 16h11   #5
witch
Membre confirmé
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 211
Points : 211
Envoyer un message via MSN à witch
Citation:
Envoyé par Philippe Robert Voir le message
Dois-tu lire des données depuis un fichier texte ?
oui c'est ça
__________________
If a pretty poster and a cute saying are all it takes to motivate you, you probably have a very easy job. The kind robots will be doing soon.
witch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2010, 12h28   #6
hmira
Membre éclairé
 
Homme Hamid MIRA
Ingénieur développement logiciels
Inscription : septembre 2003
Messages : 194
Détails du profil
Informations personnelles :
Nom : Homme Hamid MIRA
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 : 194
Points : 322
Points : 322
Bonjour. Voilà une procédure qui résout ton problème. Celle-ci a 2 paramètres.
- Le premier (IN) ,de type varchar(8000), représentant une date exprimée sous forme d’une chaine de caractères en anglais (exemple 'Jul 18 2010 10:35AM')
- Le 2ème paramètre (OUT) représentant le résultat, de type DateTime, de la transformation de la chaine préalablement passée dans le 1er paramètre.

Code :
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
CREATE PROCEDURE dbo.SP_U_StrDateEnglishToDateTime( 
  @pi_StrDateEnglish VARCHAR(8000), 
  @po_DateTime DATETIME OUT 
  ) 
AS 
BEGIN 
  SET NOCOUNT ON;  
 
  DECLARE @Language_old SYSNAME; 
 
  -- On sauvegarde la langue de la session en cours 
  SET @Language_Old  = @@LANGUAGE 
 
  -- On change la langue de la session en cours si différente de us_english 
  IF @Language_Old <> 'us_english' 
    SET LANGUAGE us_english; 
 
  -- On convertie dans le paramètre OUT (@po_DateTime) la chaine en une valeur de type DATETIME 
  IF ISDATE(@pi_StrDateEnglish) = 1  
    SET @po_DateTime = CONVERT(DATETIME, @pi_StrDateEnglish, 100)
  ELSE 
    SET @po_DateTime = NULL ; 
 
   -- On restaure la langue de la session à son état initial 
   IF @@LANGUAGE <> @Language_Old  
    SET LANGUAGE @Language_Old
 
  RETURN 
 
END
GO
Ci-dessous un exemple d’utilisation de la procédure :
Code :
1
2
3
4
5
6
7
DECLARE @StrDateEnglish varchar(8000), 
          @DateTime   datetime; 
  SET @StrDateEnglish = 'Jul 18 2010 10:35AM'; 
  EXEC dbo.SP_U_StrDateEnglishToDateTime 'Jul 18 2010 10:35AM', @DateTime OUT ; 
 
  PRINT '@DateTime = ' + convert(varchar, @DateTime, 120 ) 
  PRINT '@@language = ' + @@LANGUAGE -- juste pour vérifier la langue en cours après traitement
Résulat :
Code :
1
2
@DateTime = 2010-07-18 10:35:00
@@LANGUAGE  = Français
hmira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2010, 13h47   #7
witch
Membre confirmé
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 211
Points : 211
Envoyer un message via MSN à witch
Bonjour hmira,

C'est exactement ce que je cherchais comme technique, le mot clé est bien la langue system

Merci
__________________
If a pretty poster and a cute saying are all it takes to motivate you, you probably have a very easy job. The kind robots will be doing soon.
witch est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h46.


 
 
 
 
Partenaires

Hébergement Web