plutot que de me prendre la tete avec un truc simple
avez vous une methode sans fontion qui puisse me convertir une chaine du
genre varchar(mais comme un binaire) '1001' en INT = 9
qui vaut en integer 9
et faire l'inverse eventuellement ?
si je trouve un 9 je retrouve ma chaine '1001' ???
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Steve Kass
Christophe,
Voilà quelque fonctions qui font les conversions:
create function entier_à_chaine_bin( @e int ) returns varchar(32) as begin declare @c varchar(32) declare @p int set @p = 1 set @c = cast(cast(@p&@e as bit) as char(1)) while @p < power(2,30) begin set @p = @p*2 if @p > @e break set @c = cast(cast(@p&@e as bit) as char(1)) + @c end return @c end go
select dbo.entier_à_chaine_bin(e) from ( select 0 as e union all select 13 union all select 2147483647 union all select 1023 ) E go
create function chaine_bin_à_entier( @c varchar(32) ) returns int as begin return ( select coalesce(sum(power(2,i)),0) from ( -- n'importe quoi table donnant les valeurs 0 à 30 select top 31 ProductID-1 as i from Northwind..Products order by ProductID ) P where substring(@c,i+1,1) = '1' and i < len(@c) ) end go
select dbo.chaine_bin_à_entier(e) from ( select '0' as e union all select '1101' union all select '1111111111111111111111111111111' union all select '1111111111' ) E go
drop function entier_à_chaine_bin, chaine_bin_à_entier
-- Steve Kass -- Drew University -- 26BC61E0-F0CF-4A6D-828F-D480DB5AEFC0
Christophe wrote:
plutot que de me prendre la tete avec un truc simple
avez vous une methode sans fontion qui puisse me convertir une chaine du genre varchar(mais comme un binaire) '1001' en INT = 9 qui vaut en integer 9 et faire l'inverse eventuellement ?
si je trouve un 9 je retrouve ma chaine '1001' ???
Christophe,
Voilà quelque fonctions qui font les conversions:
create function entier_à_chaine_bin(
@e int
) returns varchar(32) as begin
declare @c varchar(32)
declare @p int
set @p = 1
set @c = cast(cast(@p&@e as bit) as char(1))
while @p < power(2,30) begin
set @p = @p*2
if @p > @e break
set @c = cast(cast(@p&@e as bit) as char(1)) + @c
end
return @c
end
go
select dbo.entier_à_chaine_bin(e)
from (
select 0 as e union all
select 13 union all
select 2147483647 union all
select 1023
) E
go
create function chaine_bin_à_entier(
@c varchar(32)
) returns int as begin
return (
select coalesce(sum(power(2,i)),0)
from (
-- n'importe quoi table donnant les valeurs 0 à 30
select top 31 ProductID-1 as i
from Northwind..Products
order by ProductID
) P
where substring(@c,i+1,1) = '1'
and i < len(@c)
)
end
go
select dbo.chaine_bin_à_entier(e)
from (
select '0' as e union all
select '1101' union all
select '1111111111111111111111111111111' union all
select '1111111111'
) E
go
drop function entier_à_chaine_bin, chaine_bin_à_entier
-- Steve Kass
-- Drew University
-- 26BC61E0-F0CF-4A6D-828F-D480DB5AEFC0
Christophe wrote:
plutot que de me prendre la tete avec un truc simple
avez vous une methode sans fontion qui puisse me convertir une chaine du
genre varchar(mais comme un binaire) '1001' en INT = 9
qui vaut en integer 9
et faire l'inverse eventuellement ?
si je trouve un 9 je retrouve ma chaine '1001' ???
create function entier_à_chaine_bin( @e int ) returns varchar(32) as begin declare @c varchar(32) declare @p int set @p = 1 set @c = cast(cast(@p&@e as bit) as char(1)) while @p < power(2,30) begin set @p = @p*2 if @p > @e break set @c = cast(cast(@p&@e as bit) as char(1)) + @c end return @c end go
select dbo.entier_à_chaine_bin(e) from ( select 0 as e union all select 13 union all select 2147483647 union all select 1023 ) E go
create function chaine_bin_à_entier( @c varchar(32) ) returns int as begin return ( select coalesce(sum(power(2,i)),0) from ( -- n'importe quoi table donnant les valeurs 0 à 30 select top 31 ProductID-1 as i from Northwind..Products order by ProductID ) P where substring(@c,i+1,1) = '1' and i < len(@c) ) end go
select dbo.chaine_bin_à_entier(e) from ( select '0' as e union all select '1101' union all select '1111111111111111111111111111111' union all select '1111111111' ) E go
drop function entier_à_chaine_bin, chaine_bin_à_entier
-- Steve Kass -- Drew University -- 26BC61E0-F0CF-4A6D-828F-D480DB5AEFC0
Christophe wrote:
plutot que de me prendre la tete avec un truc simple
avez vous une methode sans fontion qui puisse me convertir une chaine du genre varchar(mais comme un binaire) '1001' en INT = 9 qui vaut en integer 9 et faire l'inverse eventuellement ?
si je trouve un 9 je retrouve ma chaine '1001' ???