Bonjour,
Je viens de faire face à un curieux problème, que j'ai contourné, mais vos avis m'intéressent sur ce 'truc' :
Je précise que j'ai le soucis sur un SQL Server 2008 SP3 64bits
Voici donc la requête (simplifiée le plus possible pour illustrer le pb) :
Jusque là, tout va bien, j'ai bien comme résultat, les valeurs int 1 et 12.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 declare @test as table(string varchar(10)) insert into @test values('01234 aaaa') insert into @test values('12345 bbbb') insert into @test values('cccccccccc') select sub.ceci_est_un_integer from ( select convert(integer,left(string,2)) ceci_est_un_integer from @test where string like '[0-9][0-9]%' ) as sub
Et là, je rajoute juste un petit where :
Et paf :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 declare @test as table(string varchar(10)) insert into @test values('01234 aaaa') insert into @test values('12345 bbbb') insert into @test values('cccccccccc') select sub.ceci_est_un_integer from ( select convert(integer,left(string,2)) ceci_est_un_integer from @test where string like '[0-9][0-9]%' ) as sub where sub.ceci_est_un_integer > 1
==> Je suppose que le SGBD tente de simplifier la requête, mais même si j'écris la requête de la sorte :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 (1 row(s) affected) (1 row(s) affected) (1 row(s) affected) Msg 245, Level 16, State 1, Line 6 Conversion failed when converting the varchar value 'cc' to data type int.
Et bien ça fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select convert(integer,left(string,2)) ceci_est_un_integer from @test where string like '[0-9][0-9]%' and convert(integer,left(string,2)) > 1
Du coup, qu'en pensez-vous ?
Partager