Formatage du résultat de la requête SQL en fonction d'un motif

J'ai une table qui contient des formats de date différents:

######## DateTime ######## 10/05/2015 11/05/2015 1/5/2015 01/5/2014 

Maintenant, ma question est que Comment puis-je sélectionner toutes les lignes en fonction de ce model \d{2}/\d{2}/\d{4} le format du résultat avec ce model \d{4}/\d{2}/\{2} ? Le premier est dd/mm/yyyy et je voudrais que le résultat soit yyyy/mm/dd

Données de test

 DECLARE @TABLE TABLE (Dates VARCHAR(20)) INSERT INTO @TABLE VALUES ('10/05/2015'), ('11/05/2015'), ('1/5/2015'), ('01/5/2014') 

Question

La requête suivante convertira toutes les valeurs en type de données de date SQL Server correct.

 SELECT CONVERT(DATE, RIGHT('0000' + PARSENAME(REPLACE(Dates , '/','.'),1),4) + RIGHT('00' + PARSENAME(REPLACE(Dates , '/','.'),2),2) + RIGHT('00' + PARSENAME(REPLACE(Dates , '/','.'),3),2) ) FROM @TABLE 

Résultat

 2015-05-10 2015-05-11 2015-05-01 2014-05-01 

Une fois que vous avez obtenu les valeurs dans le type de date du server sql bien formaté, vous pouvez étendre la requête pour get la sortie requirejse yyyy/mm/dd en procédant comme suit:

 SELECT CONVERT(VARCHAR(10), CONVERT(DATE, RIGHT('0000' + PARSENAME(REPLACE(Dates , '/','.'),1),4) + RIGHT('00' + PARSENAME(REPLACE(Dates , '/','.'),2),2) + RIGHT('00' + PARSENAME(REPLACE(Dates , '/','.'),3),2) ), 111) FROM @TABLE 

Résultat

 2015/05/10 2015/05/11 2015/05/01 2014/05/01 

Dans votre cas, vous n'avez pas besoin d'utiliser des expressions régulières. Un simple comme devrait suffire.

... WHERE DateTime LIKE "__/__/____" ...