sql 进制转换,支持93内的进制相互转换
功能:实现在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内的进制相互转换的更多相关文章
- JS-011-颜色进制转换(RGB转16进制;16进制转RGB)
在网页开发的时候,经常需要进行颜色设置,因而经常需要遇到进行颜色进制转换的问题,例如:RGB转16进制:16进制转RGB),前几天在测试的时候,发现网站的颜色进制转换某类16进制颜色(例如:#0000 ...
- 流程控制 if while for 已及数字类型 进制转换
一:if 语句 语法一:ifif 条件: code1 code1 code1 语法二:if ...else ... if 条件: code1 code1 code1else: code1 code1 ...
- Oracle 中的进制转换
Oracle 中的进制转换 */--> Oracle 中的进制转换 Table of Contents 1. 进制名 2. 10进制与16进制互相转换 2.1. 10进制转换为16进制 2.2. ...
- Python进制转换format格式化
进制转换:先介绍用传统数学方法,再介绍用python内置方法 二进制转十进制: 1101 转为十进制 1*2^(4-1)+1*2^(3-1)+0*2^(2-1)+1*2^(1-1) 即各个位拆开,乘以 ...
- 【JavaScript】进制转换&位运算,了解一下?
前言 在一般的代码中很少会接触到进制和位运算,但这不代表我们可以不去学习它.作为一位编程人员,这些都是基础知识.如果你没有学过这方面的知识,也不要慌,接下来的知识并不会很难.本文你将会学习到: 进制转 ...
- JavaScript中的多种进制与进制转换
进制介绍 JavaScript 中提供的进制表示方法有四种:十进制.二进制.十六进制.八进制. 对于数值字面量,主要使用不同的前缀来区分: 十进制(Decimal): 取值数字 0-9:不用前缀. 二 ...
- 【String与基本类型之间的转换】以及【进制转换】
1. 基本数据类型---->字符串类型: 方法一:使用连接一个空字符串,例如 基本数据类型+“” : 方法二:静态方法 String.valueOf(),具体有: String.valueOf ...
- js进制转换
var n = 17; var n2 = n.toString(2); var n8 = "0" + n.toString(8); var n16 = "0x" ...
- 【Java例题】6.1 进制转换
1.进制转换.输入一个某种进制的整数,将其转换为其它进制的整数.说明:仅考虑十.二.八和十六进制. package chapter6; import java.util.*; public class ...
随机推荐
- 如何基于对话框的project基于改变BCG的
一,stdafx.h 增加在下面的例子.BCGCBProInc.h间接介绍lib. #include <BCGCBProInc.h> // BCGControlBar Pro #if ...
- 使用nodeitk进行对象识别
前言 东莞,晴,29至27度.忙了一天,最终能够写写东西了.今天继续昨天的话题,我们在昨天的例了基础上完好,通过匹配关键点求出映射从而找到场景中的已知对象. 目标 本文你将学习 採用nodeitk的f ...
- XML的序列化和反序列化 详细介绍
为什么要做序列化和反序列化? 一个回答: 我们都知道对象是不能在网络中直接传输的,不过还有补救的办法.XML(Extensible Markup Language)可扩展标记语言,本身就被设计用来存储 ...
- ocp11g培训内部教材_051课堂笔记(047)_SQL
OCP 051课堂笔记 目录 OCP 051课堂笔记... 1 第一章.Oracle命令类别:... 4 第二章.SQL的基本函数... 4 2.1 单行函数与多行函数... 4 2.2 单行函数的几 ...
- 整理Ruby相关的各种概念(rvm, gem, bundle, rake, rails等)
转自:http://henter.me/post/ruby-rvm-gem-rake-bundle-rails.html Ruby 这个就不用多说了 RVM 用于帮你安装Ruby环境,帮你管理多个Ru ...
- vi使用高级
下面的命令在vi命令模式被激活 h 光标左移一个字符 l 光标向右移动一个字符 j 光标下移一行 k 移动光标线 一.对整行操作 1.复制光标所在行 yy 2.删除光标所在行 dd 3.选中光标所在行 ...
- SVN记录使用过程中出现的错误(一)
由于使用SVN时间不长,故障各种奇怪的问题是不可避免的,这里记录,自己的方便还是菜鸟跟我一样的参考 一个问题: dzt@dzt-All-Series:~/D/dzt/workarea/7301_mp/ ...
- asp.net mvc3 数据验证(四)—Remote验证的一个注意事项
原文:asp.net mvc3 数据验证(四)-Remote验证的一个注意事项 前几篇把asp.net mvc3 中基于Model的主要数据验证的方法都已经讲完了,本节纯粹只是讲一个我 ...
- C# .NET ASP.NET 其中关系你了解多少
有些人一直在做这方面..但突然有人来问你这些问题..估计有很多答不上来. 1..NET是一个平台,一个抽象的平台的概念. .NET平台其本身实现的方式其实还是库,抽象层面上来看是一个平台. 个人理解. ...
- js 正则之 控制字符 \cX
原文:js 正则之 控制字符 \cX 前些天在司徒正美的群里有人问了这么个问题:正则表达式里特殊字符 \cX 到底是什么?确实,我之前也挺在意的,但是一直没去看到底是什么.在MDN上只说是控制字符(详 ...