sql 数字进制转换
来源:互联网 发布:电视看直播软件 编辑:程序博客网 时间:2024/05/01 13:09
二进制转为十进制函数:
CREATE FUNCTION Bin2Dec(@StrBin VARCHAR(32))
RETURNS INT ---- 只支持最多31位长二进制字符串的解析
AS
BEGIN
DECLARE @DecValue AS INT -- 十进制值
DECLARE @BinLen AS TINYINT -- 二进制字符串长度
DECLARE @Index AS TINYINT -- 处理二进制字符串长度的索引
DECLARE @CurrBit AS CHAR(1) -- 当前在处理哪一位
SET @BinLen = LEN(@StrBin)
SET @DecValue = 0
SET @Index = 0
WHILE @Index < @BinLen
BEGIN
SET @Index = @Index + 1
SET @CurrBit = CAST(SUBSTRING(@StrBin, @Index, 1) AS CHAR(1))
IF (@CurrBit <> '0' AND @CurrBit <> '1') -- 出现非法字符,返回-1
BEGIN
SET @DecValue = -1
BREAK
END
ELSE
BEGIN
SET @DecValue = @DecValue * 2
IF(@CurrBit = '1')
BEGIN
SET @DecValue = @DecValue + POWER(2, 0)
END
END
END
RETURN @DecValue
END
十进制转为二进制
CREATE FUNCTION Dec2Bin(@Dec BigINT, @StrLen TINYINT) --7125411734408899 51969950402343442
RETURNS VARCHAR(63) -- INT型,4字节,正数转为二进制字符串最多31位
AS
BEGIN
DECLARE @BinStr AS VARCHAR(64) -- 二进制表示的字符串
DECLARE @Div2 AS BIGINT -- 商
DECLARE @Mod2 AS BIGINT -- 模/余数
Declare @FirStr AS VARCHAR(32)
Declare @SecStr As VARCHAR(32)
Declare @FirInt AS int
Declare @SecInt As int
Declare @MobileSec int
Declare @MobileZip varchar(20)
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 > 64 -- 返回的长度,最长为32
SET @StrLen = 64
DECLARE @ZeroStr VARCHAR(64) -- 需要补充的"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
SET @FirStr = SUBSTRING(@BinStr,0,33)
SET @SecStr = SUBSTRING(@BinStr,33,64)
select @FirInt = dbo.Bin2Dec(@FirStr)
select @SecInt = dbo.Bin2Dec(@SecStr)
SET @MobileSec = @FirInt^@SecInt
select @MobileZip = rtrim(mose_zip) from dbo.[tb_MobileSect]
where mose_mobile_sect = left(cast(@MobileSec as varchar(20)),9)
END
RETURN @MobileZip
END- sql 数字进制转换
- 数字进制转换
- 进制转换,字符 <--> 数字
- sql转换字符到数字
- SQL 数字、文本相互转换
- sql 数字转换为字符
- 数字转换成指定进制的数字字符串
- javascript 各种数字进制的转换
- 16进制字符串转换为数字
- 十进制数字转换到其他进制数字
- 栈模拟数字进制转换
- php 进制之间转换数字
- js 实现数字的进制转换
- java 数字的进制转换
- PostgreSQL 16进制数字转换
- 字符转换为16进制数字
- 16进制数字转换为字符
- 用栈来进行数字的进制转换
- JBOSS环境变量配置
- 调试Log
- Asp.Net+Ajax实现的宝宝RSS阅读器源码下载
- XML学习笔记(学习XML语言必读)
- HELP in DIGITAL SIGNATURE
- sql 数字进制转换
- 博客搜索引擎列表
- [资料总结]Safari将开发新的解释器SquirrelFish
- 如何实现ArcSDE的集群功能
- 软件大纲
- ASP.NET 页面对象模型
- 几个sql语句
- div+css的命名规则
- 通用数据访问之我见