功能:实现在SQL内进制的互相转换,支持从2 - 93进制内的转换,若需要支持其他字符,可以自定义@ym变量实现扩充

 -- =============================================
-- Author: bwch
-- Create date: 2014年9月30日10:32:47
-- Description: 把一个数字转换成指定进制,最大支持93进制,也可在Function内扩充@ym实现其他的转换
-- =============================================
ALTER FUNCTION [dbo].[BigIntToHexStr](
@value BIGINT, --需要转换的数字
@jz INT = 16 --默认16进制
)
RETURNS VARCHAR(50) --返回值,进制转换后的字符串
AS
BEGIN
--可通过扩充@ym扩充其他的进制
DECLARE @seq VARCHAR(2000) --字符掩码
DECLARE @ym VARCHAR(2000) --掩码
SET @ym = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`~!@#$%^&*()-_=+[]{}\|;:",.<>/?'
SET @seq = SUBSTRING(@ym,1,@jz)
--返回值
DECLARE @result VARCHAR(50)
--取数字的字符
DECLARE @digit CHAR(1)
SET @result = SUBSTRING(@seq, (@value%@jz)+1, 1) WHILE @value > 0
BEGIN
SET @digit = SUBSTRING(@seq, ((@value/@jz)%@jz)+1, 1)
SET @value = @value/@jz
IF @value <> 0
SET @result = @digit + @result
END
RETURN @result
END
 -- =============================================
-- Author: bwch
-- Create date: 2014年9月30日10:36:14
-- Description: 把转换过的进制转换成数字
-- =============================================
ALTER FUNCTION [dbo].[HexStrToBigInt]
(
@value VARCHAR(20), --转换过的字符串
@jz INT = 16 --进制,默认16进制
)
RETURNS BIGINT
AS
BEGIN
DECLARE @result BIGINT
DECLARE @ym VARCHAR(2000) --掩码
SET @ym = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`~!@#$%^&*()-_=+[]{}\|;:",.<>/?'
DECLARE @i INT = LEN(@value) - 1
DECLARE @digit CHAR(1)
SET @result = (CHARINDEX(SUBSTRING(@value,LEN(@value),1),@ym)-1)
DECLARE @w INT
WHILE @i > 0
BEGIN
SET @digit = SUBSTRING(@value,@i,1)
SET @w = (CHARINDEX(@digit,@ym)-1) * POWER(@jz,(LEN(@value) - @i))
SET @result = @result + @w
SET @i = @i - 1
END
RETURN @result
END

测试用例:

 DECLARE @i BIGINT = 10000, @jz INT = 32
DECLARE @str VARCHAR(20) = dbo.BigIntToHexStr(@i,@jz)
PRINT '数字 ' + CAST(@i AS VARCHAR(20)) + ' 转换成' + CAST(@jz AS VARCHAR(2)) + '进制的结果为: '+ @str
DECLARE @r BIGINT =dbo.HexStrToBigInt(@str,@jz)
PRINT CAST(@jz AS VARCHAR(2)) +'进制的字符串 ' + @str + ' 转换成数字为:' + CAST(@r AS VARCHAR(20))

测试结果:

数字 10000 转换成32进制的结果为: 9OG
32进制的字符串 9OG 转换成数字为:10000

测试环境

Windows 7 x64 + SQL Server 2008 Express R2

sql 进制转换,支持93内的进制相互转换的更多相关文章

  1. JS-011-颜色进制转换(RGB转16进制;16进制转RGB)

    在网页开发的时候,经常需要进行颜色设置,因而经常需要遇到进行颜色进制转换的问题,例如:RGB转16进制:16进制转RGB),前几天在测试的时候,发现网站的颜色进制转换某类16进制颜色(例如:#0000 ...

  2. 流程控制 if while for 已及数字类型 进制转换

    一:if 语句 语法一:ifif 条件: code1 code1 code1 语法二:if ...else ... if 条件: code1 code1 code1else: code1 code1 ...

  3. Oracle 中的进制转换

    Oracle 中的进制转换 */--> Oracle 中的进制转换 Table of Contents 1. 进制名 2. 10进制与16进制互相转换 2.1. 10进制转换为16进制 2.2. ...

  4. Python进制转换format格式化

    进制转换:先介绍用传统数学方法,再介绍用python内置方法 二进制转十进制: 1101 转为十进制 1*2^(4-1)+1*2^(3-1)+0*2^(2-1)+1*2^(1-1) 即各个位拆开,乘以 ...

  5. 【JavaScript】进制转换&位运算,了解一下?

    前言 在一般的代码中很少会接触到进制和位运算,但这不代表我们可以不去学习它.作为一位编程人员,这些都是基础知识.如果你没有学过这方面的知识,也不要慌,接下来的知识并不会很难.本文你将会学习到: 进制转 ...

  6. JavaScript中的多种进制与进制转换

    进制介绍 JavaScript 中提供的进制表示方法有四种:十进制.二进制.十六进制.八进制. 对于数值字面量,主要使用不同的前缀来区分: 十进制(Decimal): 取值数字 0-9:不用前缀. 二 ...

  7. 【String与基本类型之间的转换】以及【进制转换】

    1. 基本数据类型---->字符串类型: 方法一:使用连接一个空字符串,例如  基本数据类型+“” : 方法二:静态方法 String.valueOf(),具体有: String.valueOf ...

  8. js进制转换

    var n = 17; var n2 = n.toString(2); var n8 = "0" + n.toString(8); var n16 = "0x" ...

  9. 【Java例题】6.1 进制转换

    1.进制转换.输入一个某种进制的整数,将其转换为其它进制的整数.说明:仅考虑十.二.八和十六进制. package chapter6; import java.util.*; public class ...

随机推荐

  1. Git 少用 Pull 多用 Fetch 和 Merge(转)

    英文原文:git: fetch and merge, don’t pull This is too long and rambling, but to steal a joke from Mark T ...

  2. UVA 11174 Stand in a Line 树dp+算

    主题链接:点击打开链接 题意:白书的P103. 加个虚根就能够了...然后就是一个多重集排列. import java.io.PrintWriter; import java.util.ArrayLi ...

  3. UVa753/POJ1087_A Plug for UNIX(网络流最大流)(小白书图论专题)

    解题报告 题意: n个插头m个设备k种转换器.求有多少设备无法插入. 思路: 定义源点和汇点,源点和设备相连,容量为1. 汇点和插头相连,容量也为1. 插头和设备相连,容量也为1. 可转换插头相连,容 ...

  4. ISA TEST Writeup

    刚出来的hack游戏,非常easy,现在只有7关.考虑入门级.没有什么可以玩. http://helloisa.com/ LEVEL 1 细致观察页面,入侵的第一步是收集一切可能产生价值的信息 ps: ...

  5. enq: TX - row lock contention 参数P1,P2,P3说明

    enq: TX - row lock contention三个参数,例如,下面的等待事件 * P1 = name|mode          <<<<<<< ...

  6. Java学习之路:ArrayList用法

    1.什么是ArrayList     ArrayList是一个动态数组传奇,使用MSDN声明.那是,Array复杂的版本号,它具有以下优点,例如: 动态的添加和降低元素 实现了ICollection和 ...

  7. 打造简易可扩展的jQuery/CSS3 Tab菜单

    原文:打造简易可扩展的jQuery/CSS3 Tab菜单 今天我们利用jQuery和CSS3来打造一款简易而且扩展性强的Tab菜单,这款Tab菜单在切换时也有滑块的效果,先来看看效果图: 由与Tab菜 ...

  8. decimal system 2016

    Problem Description As we know , we always use the decimal system in our common life, even using the ...

  9. Windows Phone 8.1 应用生命周期

    原文:Windows Phone 8.1 应用生命周期 一.“后退键”不会终止应用 关于 Windows Phone 8.1 的应用生命周期,第一个要知道的关键就是:“后退键”不会终止应用! 在 8. ...

  10. Atitit.异步编程 java .net php python js 对照

    Atitit.异步编程 java .net php python js 的比較 1. 1.异步任务,异步模式,  APM模式,,  EAP模式, TAP 1 1.1.       APM模式: Beg ...