sql 进制转换,支持93内的进制相互转换

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

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

测试用例:

1 DECLARE @i BIGINT = 10000, @jz INT = 32
2 DECLARE @str VARCHAR(20) = dbo.BigIntToHexStr(@i,@jz)
3 PRINT ‘数字 ‘ + CAST(@i AS VARCHAR(20)) + ‘ 转换成‘ + CAST(@jz AS VARCHAR(2)) + ‘进制的结果为: ‘+ @str
4 DECLARE @r BIGINT =dbo.HexStrToBigInt(@str,@jz)
5 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

时间: 2025-01-16 11:42:34

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

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

在网页开发的时候,经常需要进行颜色设置,因而经常需要遇到进行颜色进制转换的问题,例如:RGB转16进制:16进制转RGB),前几天在测试的时候,发现网站的颜色进制转换某类16进制颜色(例如:#000080,#FA08FA)转换时总是提示颜色非法,看了一下 js 源码,发现其进制转换的方法是错误的.找了一下度娘和谷大爷,最终写了一个颜色转换的小方法,源码如下所示: String.prototype.colorHex2Rgb = function(){ var reg = /^#([0-9a-fA-

进制转换模板 (十进制 &lt; == &gt; 任意进制 )

/*任意进制 转 十进制 **********************************************/ int pow(int n,int time) { int ans=1; for(int i=1;i<=time;i++) ans*=n; return ans; } int change_any_to_10(char *s,int type) { int ans=0; int len = strlen(s); for(int i=0;i<len;i++) { if(s[i

常用进制转换

原文:常用进制转换 最近的工作中,需要接触到一些硬件设备,处理这些设备的通讯,因此需要进行一些进制的转换.      其实,二进制.十六进制这些基本的知识,在我们刚学编程的时候,基础课应该已经讲过的了.但是,包括我自己在内,当时也仅仅是知道一般的换算规则,但是具体怎么应用,在c#中又是如何表示,也是近期才有比较深的体会.      具体的知识,各位就自己查看相关的基础知识了,这里我只给出自己在工作中的体会和实际的类库.      首先,先解释下C#的类型.一般,我们常用的有 byte.short

常见的进制转换与有符号数据表示法

注:本内容参考与传智播客的Java内容的讲解,当然我整理了一下,做个记录~~~ 其中我认为很有价值的是有符号数据表示法,真正的去深入了解计算机,虽然我是一个渣渣~~~ 所谓进制就是指:就是位进制,是人们规定的一种进位方法.对于任何一种进制 --X进制,就表示某一位置上的数运算时是逢X进一位.二进制就是逢二进一,八进制就是逢八进一,十进制就是逢十进一,十六进制就是逢十六进一. 一.常见的进制转换 1.在Java中针对整数常量提供了四种表现形式 (1)二进制 由0,1组成.以0b开头. (2)八进制

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

1. 基本数据类型---->字符串类型: 方法一:使用连接一个空字符串,例如  基本数据类型+“” : 方法二:静态方法 String.valueOf(),具体有: String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串 String.valueOf(char c) : 将 char 变量 c 转换成字符串 String.valueOf(char[] data) : 将 char 数组 data 转换成字符串 String.valueOf(char[]

c#中的进制转换

今天偶然接触到了一个位或的表达式,就像着自己做一个进制之间的转换器,基本功不扎实,二进制之间的运算稀里糊涂的. 常见的进制方式,主要有二进制,八进制,十进制和十六进制,通用的转换方式是把非十进制的数据类型转换成十进制的,然后再转换成其他类型. 进制转换的入口函数: /// <summary> /// 进制转换 /// </summary> /// <param name="input"></param> /// <param nam

蓝桥杯 16进制转换8进制

蓝桥杯 16进制转换8进制 我表示我自己太渣渣了,总是超时,通不过测试. 题目 问题描述 给定n个十六进制正整数,输出它们对应的八进制数.输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000.输出格式 输出n行,每行为输入对应的八进制正整数.注意 输入的十六进制数不会有前导0,比如012A. 输出的八进制数也不能有前导0.样例输入239123ABC样例输出7144

59任由制转换

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h> int 文本到整数(char * p_输入) { int l_几位数 = strlen(p_输入); int l_结果 = 0; int i = 0; if (p_输入[0] == '-') {  i = 1; } for (; i < l_几位数; i++) {  int l_倍数 = 1;  for (size

SQL Server 进制转换函数

一.背景 前段时间群里的朋友问了一个问题:“在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0—9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下面的映射表“: (Figure1:效果图) 二.十进制转换为十六进制 在网上有很多资料关于使用SQL语句把十进制转换为十六进制的资料,比如: --方式1 SELECT CONVERT(VARBINARY(50), 23785) 执行返回值为0x00005CE9,但是需要注意的是,这本应该返回二进制的