Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1229 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Convertir un varchar en date

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Convertir un varchar en date

n°1679767
alpachinoi​s
Posté le 31-01-2008 à 15:14:49  profilanswer
 

Bonjour,  
J'ai besoin lors d'un SELECT en php/AJAX de convertir un varchar en date. Cependant, la colonne ou se trouve la date ne possède que le numéro de semaine et l'année. Le but final étant de pouvoir faire des comparaisons comme par exemple :

Code :
  1. SELECT * FROM affaire WHERE date_liv>'26/2008' AND date_liv<'40/2008'


 
Ma SGBD étant SQL-Server.
 
Merci d'avance de votre aide.

mood
Publicité
Posté le 31-01-2008 à 15:14:49  profilanswer
 

n°1679779
skeye
Posté le 31-01-2008 à 15:22:39  profilanswer
 

...et en modifiant le champ pour simplement être écrit YYYYWW ça ferait pas l'affaire, vu qu'a priori seules l'année et la semaine sont intéressantes?


---------------
Can't buy what I want because it's free -
n°1679791
alpachinoi​s
Posté le 31-01-2008 à 15:28:06  profilanswer
 

Je n'ai pas trop saisi la chose... Je dois dans ma requête faire un truc du genre CONVERT(... Date,'YYYYWW') As 'Date'?

n°1679802
MagicBuzz
Posté le 31-01-2008 à 15:30:45  profilanswer
 

non, stocker dans la base non pas au format "WW/YYYY" mais "YYYYWW"
à ce moment, un tri alphabétique permet de faire un tri chronologique

n°1679811
alpachinoi​s
Posté le 31-01-2008 à 15:34:54  profilanswer
 

Le problème est que c'est pas moi qui gère la base :'( . Je n'ai donc pas le droit d'y toucher je peux jus faire des requêtes dessus. Mais je pense peut-être qu'il faut trouver une fonction qui inverse les caractères et ainsi les convertir en date format WW/YYYY.

n°1679816
skeye
Posté le 31-01-2008 à 15:36:31  profilanswer
 

alpachinois a écrit :

Le problème est que c'est pas moi qui gère la base :'( . Je n'ai donc pas le droit d'y toucher je peux jus faire des requêtes dessus. Mais je pense peut-être qu'il faut trouver une fonction qui inverse les caractères et ainsi les convertir en date format WW/YYYY.


bah tu peux trier en fonction d'une concaténation des deux sous-chaines...niveau perfs ça va être bof, mais je suis pas sûr qu'une conversion en date fera mieux...:/


---------------
Can't buy what I want because it's free -
n°1679839
MagicBuzz
Posté le 31-01-2008 à 15:48:40  profilanswer
 

d'autant que je doute que SQL Server sache convertir une date écrite dans ce format, et que ça va tout de suite se transformer en usine à gaz...
 
du coup, je dirais un truc du genre :
 

Code :
  1. ORDER BY RIGHT(date_liv, len(date_liv) - charindex('/', date_liv)) + replicate('0', 2 - len(LEFT(date_liv, charindex('/', date_liv) - 1))) + LEFT(date_liv, charindex('/', date_liv) - 1)


 
(non non, tu ne rêves pas, c'est bel et bien tout pourri !)

n°1679843
MagicBuzz
Posté le 31-01-2008 à 15:50:13  profilanswer
 

PS : si tu es sûr que c'est bien toujours la semaine sur 2 caractères et l'année sur 4 caractères, tu peux quand même améliorer la chose :

Code :
  1. ORDER BY RIGHT(date_liv, 4) + LEFT(date_liv, 2)

n°1679850
alpachinoi​s
Posté le 31-01-2008 à 15:53:25  profilanswer
 

Oui normalement, si il n'y a pas d'erreur ds la DBA la semaine est bien sur 2 caractères et l'année sur 4. Je vais essayer ce code pour voir ^^.
 

n°1679924
alpachinoi​s
Posté le 31-01-2008 à 16:41:39  profilanswer
 

alpachinois a écrit :

Oui normalement, si il n'y a pas d'erreur ds la DBA la semaine est bien sur 2 caractères et l'année sur 4. Je vais essayer ce code pour voir ^^.
 


 
 
Voilà, j'ai résolu mon problème même si c'est pas très propre avec :
 
 

Code :
  1. SUBSTRING(affaire.date_liv,1,2) BETWEEN 26 AND 40 AND SUBSTRING(affaire.date_liv,4,4)=2008

mood
Publicité
Posté le 31-01-2008 à 16:41:39  profilanswer
 

n°1679980
MagicBuzz
Posté le 31-01-2008 à 17:23:46  profilanswer
 

je te conseille de faire ma seconde syntaxe (sauf que moi j'ai fait un order)
 

Code :
  1. RIGHT(date_liv, 4) + LEFT(date_liv, 2) BETWEEN '200826' AND '200840'


 
en effet, ton truc est bien sauf le jour où tu fdois comparer des dates à cheval sur deux années ;)

n°1680621
alpachinoi​s
Posté le 01-02-2008 à 17:14:44  profilanswer
 

MagicBuzz a écrit :

je te conseille de faire ma seconde syntaxe (sauf que moi j'ai fait un order)
 

Code :
  1. RIGHT(date_liv, 4) + LEFT(date_liv, 2) BETWEEN '200826' AND '200840'


 
en effet, ton truc est bien sauf le jour où tu fdois comparer des dates à cheval sur deux années ;)


 
 
En effet et j'ai trouvé un auter moyen pour comparer deux dates sur deux années différentes :
 

Code :
  1. (SUBSTRING(affaire_bis.date_liv,1,2) BETWEEN 2 AND 52 AND SUBSTRING(affaire_bis.date_liv,4,4)='2007') OR
  2. (SUBSTRING(affaire_bis.date_liv,1,2) BETWEEN 1 AND 32 AND SUBSTRING(affaire_bis.date_liv,4,4)='2008')


Message édité par alpachinois le 01-02-2008 à 17:15:50

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Convertir un varchar en date

 

Sujets relatifs
[PHP] indiquer la date de la dernière MAJ du site...[php / mysql] Numéros de page et tri sur champ date
[PHP] oracle et paramètre de type date ( ou alors sysdate ;) )Convertir une macro vb en .exe
Convertir une fraction obtenue en Inputbox en une variable numériqueScript - Renommer ue photo en fonction de de la date
Un besoin de date ...modifier la date de création d'un fichier
Date 2008-01-09 vers Mercredi 9 janvier 2008 ?Convertir date anglaise en francaise
Plus de sujets relatifs à : Convertir un varchar en date


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR