Convertir un varchar en date

Convertir un varchar en date - SQL/NoSQL - Programmation

Marsh Posté le 31-01-2008 à 15:14:49    

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.

Reply

Marsh Posté le 31-01-2008 à 15:14:49   

Reply

Marsh Posté le 31-01-2008 à 15:22:39    

...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 -
Reply

Marsh Posté le 31-01-2008 à 15:28:06    

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

Reply

Marsh Posté le 31-01-2008 à 15:30:45    

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

Reply

Marsh Posté le 31-01-2008 à 15:34:54    

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.

Reply

Marsh Posté le 31-01-2008 à 15:36:31    

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 -
Reply

Marsh Posté le 31-01-2008 à 15:48:40    

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 !)

Reply

Marsh Posté le 31-01-2008 à 15:50:13    

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)

Reply

Marsh Posté le 31-01-2008 à 15:53:25    

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 ^^.
 

Reply

Marsh Posté le 31-01-2008 à 16:41:39    

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

Reply

Marsh Posté le 31-01-2008 à 16:41:39   

Reply

Marsh Posté le 31-01-2008 à 17:23:46    

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 ;)

Reply

Marsh Posté le 01-02-2008 à 17:14:44    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed