[2008] Problème convert et sous requête
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) :
Code:
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 |
Jusque là, tout va bien, j'ai bien comme résultat, les valeurs int 1 et 12.
Et là, je rajoute juste un petit where :
Code:
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 |
Et paf :
Code:
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. |
==> Je suppose que le SGBD tente de simplifier la requête, mais même si j'écris la requête de la sorte :
Code:
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 |
Et bien ça fonctionne.
Du coup, qu'en pensez-vous ?