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 !
Si je veux tomber dans le 2ème cas, il suffit de modifier '24/10/2017' en '24102017'
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
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 :
Si quelqu'un a une explication, je suis preneur !!
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.![]()
Partager