十进制SQLserver,十进制SQLserver

sql Server如何编写函数实现把十进制数转换为二进制数?求大神相助!!

创建函数

商水ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

create FUNCTION [dbo].[Dec2Bin](@Dec INT, @StrLen INT)

RETURNS VARCHAR(31) -- INT型,4字节,正数转为二进制字符串最多31位

AS

BEGIN

DECLARE @BinStr AS VARCHAR(31)      -- 二进制表示的字符串

DECLARE @Div2 AS INT                -- 商

DECLARE @Mod2 AS INT                -- 模/余数

IF @Dec  0

RETURN 'NULL'              -- 不支持负数的转换

SET @Div2 = @Dec / 2 

SET @Mod2 = @Dec % 2 

SET @BinStr = ''

WHILE @Div2  0

BEGIN

SET @BinStr = CAST(@Mod2 AS CHAR(1)) + @BinStr

SET @Dec = @Dec / 2

SET @Div2 = @Dec / 2

SET @Mod2 = @Dec % 2

END;

SET @BinStr = CAST(@Mod2 AS CHAR(1)) + @BinStr -- 至此,已完成十进制到二进制的转换

IF @StrLen  LEN(@BinStr)    -- 如果用户指定的长度大于实际长度,则需要左边补0

BEGIN

IF @StrLen  31    -- 返回的长度,最长为32

SET @StrLen = 31

DECLARE @ZeroStr VARCHAR(31)    -- 需要补充的"0000..."

DECLARE @OffsetLen TINYINT       -- 需要补充几个"0"

SET @ZeroStr = ''

SET @OffsetLen = @StrLen - LEN(@BinStr)

WHILE  @OffsetLen  0

BEGIN

SET @ZeroStr = @ZeroStr + '0'

SET @OffsetLen = @OffsetLen - 1

END

SET @BinStr = @ZeroStr + @BinStr

END

RETURN @BinStr

END

调用函数

select [dbo].[Dec2Bin](3,8)

其中3是要转换的数字,8是最后二进制的长度,不足位的前补0

sqlsever在已建的表中对属性怎么进行精度限制

moneydecimal(18,2)。

1、定点精度,小数点左边和右边可以存储的十进制数字的最大个数,最大精度为38。

2、表示小数位数,小数点右边可以存储的十进制数字的最大个数,小数位必须是0~18之间,SQLServer 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行MicrosoftWindows98 的膝上型电脑到运行MicrosoftWindows2012 的大型多处理器的服务器等多种平台使用。

关于sqlserver数据类型的问题

把数据类型float改为 numeric(18,4)

注:numeric(p,s)p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p之间的值,默认小数位数是0

SQLSERVER 里的 DECIMAL(5,2) 是什么意思

SQLSERVER 里的 DECIMAL(5,2)的意思:最大5位数字,其中两位小数的数字类型。

Decimal 数据类型Decimal 变量存储为 96 位(12 个字节)无符号的整型形式,并除以一个 10 的幂数。

这个变比因子决定了小数点右面的数字位数,其范围从 0 到 28。变比因子为 0(没有小数位)的情形下,最大的可能值为 +/-79,228,162,514,264,337,593,543,950,335。

而在有 28 个小数位的情况下,最大值为 +/-7.9228162514264337593543950335,而最小的非零值为 +/-0.0000000000000000000000000001。

扩展资料

DECIMAL在其他开发工具的用法:

1、powerBuilder。

直接在编写控件的时候使用就可以了。比如:当编写一个Clicked事件脚本时就可以decimal r这样使用。

2、Visual Studio。

在一个浮点类型的值后加一个大写或小写的M,则编辑器会认为这个浮点类型的值是一个Decimal类型。这种128位高精度十进制数表示法通常用在财务计算中。

参考资料来源:百度百科-Decimal

SQL Server中数据溢出问题

et @r=@r+

convert(BIGint,

(

case

when @s='9' then @s

when @s='A' then '10'

when @s='B' then '11'

when @s='C' then '12'

when @s='D' then '13'

when @s='E' then '14'

when @s='F' then '15'

end

))

*power(Cast(16 as bigint),len(@Hex)-@i)

用SQL实现某字段十进制转十六进制

利用SQLSERVER中的varbinary来间接实现。

16进制字符串转10进制bigint(0-FFFFFFFFFFFFFFFF):

由于二进制比较容易转换为bigint 所以先将字符串转为二进制varbinary,再转换为10进制

CREATE  function [dbo].[hextoint](@s varchar(16)) 

returns bigint  

begin 

declare @result bigint

set @result=CONVERT(bigint, CONVERT(varbinary, CAST(N'0x' + @s AS char), 1))--最简单有效的方法

return @result

END

GO

10进制转16进制字符串(bigint正负数都可以):相同的思路目前可以将二进制varbinary转换为字符串比较容易,那么先将10进制转二进制再进行16进制字符串输出

CREATE   function [dbo].[inttohex](@num bigint) 

returns varchar(16)  

begin 

declare @num2 varbinary(8),@r varchar(50)

set @num2=convert(varbinary(8),@num)--直接转换为二进制

set @r= dbo.varbin2hexstr(@num2)--二进制转16进制字符串

return @r 

end 

GO

CREATE function [dbo].[varbin2hexstr](

@bin varbinary(8000)

)returns varchar(8000)

as

begin

declare @re varchar(8000),@i int

select @re='',@i=datalength(@bin)

while @i0

select @re=substring('0123456789ABCDEF',substring(@bin,@i,1)/16+1,1)

+substring('0123456789ABCDEF',substring(@bin,@i,1)%16+1,1)

+@re

,@i=@i-1

-- return('0x'+@re)

return @re

end

GO

以上代码测试环境WIN2003+SQLSERVER2008


网页标题:十进制SQLserver,十进制SQLserver
文章起源:http://ybzwz.com/article/dsghcoh.html