Je viens de produire un cas intéressant :
- Je récupère un format de date soit : '24/10/2017' Ou '24102017' que je mets dans ma variable @test
- Je veux pouvoir tester ces cas et retourner la conversion du varcahr en date, ça fonctionne mais je ne comprends pas pourquoi !


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
DECLARE @test VARCHAR(10)
SET @test = '24/10/2017'
 
SELECT CASE WHEN
@test LIKE '[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]'
THEN (CONVERT(datetime,@test,103)) 
ELSE SUBSTRING(@test, 3, 2) + '/' + SUBSTRING(@test, 1, 2) + '/' + SUBSTRING(@test, 5, 4)  --'TEST TOTO'
END AS datetest
Si je veux tomber dans le 2ème cas, il suffit de modifier '24/10/2017' en '24102017'
le problème c'est qu'il me convertit qd même au format Datetime au lieu de me retourner ma chaine concaténée : 2017/10/24
En fait quoi qu'il arrive, j'ai une conversion au format Datetime.
Alors que ca : SELECT (CONVERT(datetime,'24102017',103)) ne fonctionne pas.

De ce que je comprends, implicitement, le moteur SQL essaye de passer par la fonction Convert même s'il ne passe pas par la condition et même si on change l'ordre des conditions :

exemple, je m'attends à avoir '10/24/2017' qui ne marche pas :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
DECLARE @test VARCHAR(10)
SET @test = '24102017'
 
SELECT CASE WHEN
@test LIKE '[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]'
THEN (CONVERT(datetime,@test,103)) 
ELSE 'TEST TOTO'
END AS datetest
 
Msg 241, Level 16, State 1, Line 4
Conversion failed when converting date and/or time from character string.
Si quelqu'un a une explication, je suis preneur !!