IF OBJECT_ID(N'dbo.c_GetUTF8Code') IS NOT NULL
DROP FUNCTION dbo.c_GetUTF8Code;
GO
CREATE FUNCTION [dbo].[c_GetUTF8Code]
(
@char Nchar
)
RETURNS int
AS
--UTF8转码
BEGIN
Declare @Code int
Select @Code=Cast(Unicode(@char) as int)
Declare @Utf8Code int
Set @Utf8Code=0
if(@Code<128)
begin
--0-127
--0000-007F
--0xxxxxxx
--01100010 Unocide
--01100010 UTF-8
Set @Utf8Code=@Code
end
else if(@Code>127 and @Code<2048)
begin
--128-2047
--0080-07FF
--110xxx xx10xx xxxx
--110 7 F F
Declare @C1 int
Declare @C2 int
Declare @C3 int
Select @C1=@Code/0x100
Select @C2=(@Code%0x100)/0x10
Select @C3=@Code%0x10
Select @Utf8Code=0xC080+0x400*@C1+0x100*(@C2/4)+0x10*(@C2%4)+@C3
end
else if(@Code>2047 and @Code<65536)
begin
--2047-65535
--0110 0010 0001 0001
--1110 xxxx 10xx xxxx 10xx xxxx
--1110 0110 1000 1000 1001 0001
Declare @C11 int
Declare @C12 int
Declare @C13 int
Declare @C14 int
Select @C11=@Code/0x1000
Select @C12=(@Code%0x1000)/0x100
Select @C13=(@Code%0x100)/0x10
Select @C14=@Code%0x10
Select @Utf8Code=0xE08080+0x10000*@C11+0x400*@C12+0x100*(@C13/4)+0x10*(@C13%4)+@C14
end
return @Utf8Code
End
GO
-------加密函数[dbo].[base64_utf8encode]----
IF OBJECT_ID(N'dbo.base64_utf8encode') IS NOT NULL
DROP FUNCTION dbo.base64_utf8encode;
GO
CREATE FUNCTION [dbo].[base64_utf8encode]
(
@plain_text varchar(max)
)
RETURNS varchar(max)
AS BEGIN
--Base64解密
DECLARE @output varchar(max)
DECLARE @block_start integer
DECLARE @map char(64)
SET @map='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
SET @output=''
SET @block_start=0
Declare @plain_textLength int
Set @plain_textLength=Len(@plain_text)
Declare @RestTransfer int--转码数累积
Declare @RestTransferLenth int
Set @RestTransfer=0
Set @RestTransferLenth=0
Declare @CodeInt int
Declare @block_val BINARY(3)
WHILE @block_start<@plain_textLength
BEGIN
Set @CodeInt=0
SELECT @CodeInt= [dbo].[c_GetUTF8Code](SubString(@plain_text,@block_start+1,1))
Declare @CodeTransfer int
Set @CodeTransfer=0
--0-127 1位
--128-2047 2位
--2047-65535 3位
if(@CodeInt<128)
begin
--+1位
if(@RestTransferLenth=0 or @RestTransferLenth=1)
begin
Set @RestTransfer=@RestTransfer*0x100+@CodeInt
Set @RestTransferLenth=@RestTransferLenth+1
end
else if(@RestTransferLenth=2)
begin
Set @CodeTransfer=@RestTransfer*0x100+@CodeInt
Set @RestTransfer=0
Set @RestTransferLenth=0
end
end
else if(@CodeInt>127 and @CodeInt<2048)
begin
--+2位
if(@RestTransferLenth=0)
begin
Set @RestTransfer=@CodeInt
Set @RestTransferLenth=2
end
else if(@RestTransferLenth=1)
begin
Set @CodeTransfer=0x10000*@RestTransfer+@CodeInt
Set @RestTransfer=0
Set @RestTransferLenth=0
end
else if(@RestTransferLenth=2)
begin
Set @CodeTransfer=0x100*@RestTransfer+@CodeInt/0x100
Set @RestTransfer=@CodeInt%0x100
Set @RestTransferLenth=1
end
end
else if(@CodeInt>2047)
begin
--+3位
if(@RestTransferLenth=0)
begin
Set @CodeTransfer=@CodeInt
Set @RestTransfer=0
Set @RestTransferLenth=0
end
else if(@RestTransferLenth=1)
begin
Set @CodeTransfer=0x10000*@RestTransfer+@CodeInt/0x100
Set @RestTransfer=@CodeInt%0x100
Set @RestTransferLenth=1
end
else if(@RestTransferLenth=2)
begin
--剩余部分十六进制右移两位与新数据前两位之和
Set @CodeTransfer=0x100*@RestTransfer+@CodeInt/0x10000
Set @RestTransfer=@CodeInt%0x10000
Set @RestTransferLenth=2
end
end
---累积到3位,执行加密转换
if(@CodeTransfer>0x100000)
begin
SET @block_val = CAST(@CodeTransfer AS BINARY(3))
SET @output = @output
+ SUBSTRING(@map , @block_val/262144 +1,1)
+ SUBSTRING(@map ,(@block_val/4096&63)+1,1)
+ SUBSTRING(@map ,(@block_val/64 &63)+1,1)
+ SUBSTRING(@map ,(@block_val&63) +1,1)
end
SET @block_start=@block_start+1
END
IF @RestTransferLenth>0
BEGIN
SET @block_val=Cast(@RestTransfer*(Case @RestTransferLenth When 1 Then 65536 Else 256 end) as BINARY(3))
SET @output=@output
+SUBSTRING(@map , @block_val/262144+1, 1)
+SUBSTRING(@map ,(@block_val/4096 &63)+1,1)
+CASE WHEN @RestTransferLenth =1
THEN REPLACE(SUBSTRING(@map ,(@block_val/64&63)+1,1),'A','=')
ELSE SUBSTRING(@map ,(@block_val/64&63)+1,1)
END
+CASE WHEN @RestTransferLenth=1
THEN '='
ELSE REPLACE(SUBSTRING(@map ,(@block_val&63)+1,1),'A','=')
END
END
RETURN @output
END
GO
----------解密函数----------
IF OBJECT_ID(N'dbo.base64_utf8decode') IS NOT NULL
DROP FUNCTION dbo.base64_utf8decode;
GO
CREATE FUNCTION [dbo].[base64_utf8decode]
(
@encoded_text varchar(max)
)
RETURNS varchar(max)
AS BEGIN
--BASE64加密
DECLARE @output varchar(max)
DECLARE @block_start int
DECLARE @encoded_length int
DECLARE @decoded_length int
DECLARE @mapr binary(122)
SET @output = ''
SET @mapr =
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -- 1-33
+0xFFFFFFFFFFFFFFFFFFFF3EFFFFFF3F3435363738393A3B3C3DFFFFFF00FFFFFF -- 33-64
+0x000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF -- 65-96
+0x1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233-- 97-122
SET @encoded_length=LEN(@encoded_text)
SET @decoded_length=@encoded_length/4*3
SET @block_start=1
Declare @Code int
Set @Code=0
Declare @CodeLength int--累计连接数,1,2,3
Set @CodeLength =0
WHILE @block_start<@encoded_length
BEGIN
Declare @Integer Integer
Set @Integer=substring(@mapr,Unicode(substring(@encoded_text,@block_start ,1)),1)*262144
+ substring(@mapr,Unicode(substring(@encoded_text,@block_start+1,1)),1)*4096
+ substring(@mapr,Unicode(substring(@encoded_text,@block_start+2,1)),1)*64
+ substring(@mapr,Unicode(substring(@encoded_text,@block_start+3,1)),1)
Declare @C1 int
Declare @C2 int
Declare @C3 int
--0xFF FF FF
Set @C1=@Integer/0x10000
Set @C2=(@Integer/0x100)%0x100
Set @C3=@Integer%0x100
-------------------------------------@C1
if(@C1<0x80)
begin
if(@CodeLength=2)
begin
--128-2047
--0080-07FF
--110x xx xx 10xx xxxx
Set @Code=((@Code%0x2000)/0x100)*0x10+@Code%0x40
SET @output=@output+NCHAR(@Code)
--print @Code
Set @Code=0
Set @CodeLength=0
end
SET @output=@output+CAST(Cast(@C1 AS BINARY(1))AS VARCHAR(1))
end
else
begin
--码字连接
Set @Code=@Code*0x100+@C1
SET @CodeLength=@CodeLength+1
if(@CodeLength=3)
begin
--0110 0010 0001 0001
--1110 xxxx 10xx xxxx 10xx xxxx
--1110 0110 1000 1000 1001 0001
Set @Code=((@Code%0x100000)/0x10000)*0x1000+((@Code%0x4000)/0x100)*0x40+@Code%0x40
SET @output=@output+NCHAR(@Code)
Set @Code=0
Set @CodeLength=0
end
end
-------------------------------------@C2
if(@C2<0x80)
begin
if(@CodeLength=2)
begin
--128-2047
--0080-07FF
--110x xx xx 10xx xxxx
Set @Code=((@Code%0x2000)/0x100)*0x10+@Code%0x40
SET @output=@output+NCHAR(@Code)
--print @Code
Set @Code=0
Set @CodeLength=0
end
SET @output=@output+CAST(Cast(@C2 AS BINARY(1))AS VARCHAR(1))
end
else
begin
--码字连接
Set @Code=@Code*0x100+@C2
SET @CodeLength=@CodeLength+1
if(@CodeLength=3)
begin
--0110 0010 0001 0001
--1110 xxxx 10xx xxxx 10xx xxxx
--1110 0110 1000 1000 1001 0001
Set @Code=((@Code%0x100000)/0x10000)*0x1000+((@Code%0x4000)/0x100)*0x40+@Code%0x40
SET @output=@output+NCHAR(@Code)
Set @Code=0
Set @CodeLength=0
end
end
-------------------------------------@C3
if(@C3<0x80)
begin
if(@CodeLength=2)
begin
--128-2047
--0080-07FF
--110x xx xx 10xx xxxx
Set @Code=((@Code%0x2000)/0x100)*0x10+@Code%0x40
SET @output=@output+NCHAR(@Code)
--print @Code
Set @Code=0
Set @CodeLength=0
end
SET @output=@output+CAST(Cast(@C3 AS BINARY(1))AS VARCHAR(1))
end
else
begin
--码字连接
Set @Code=@Code*0x100+@C3
SET @CodeLength=@CodeLength+1
if(@CodeLength=3)
begin
--0110 0010 0001 0001
--1110 xxxx 10xx xxxx 10xx xxxx
--1110 0110 1000 1000 1001 0001
Set @Code=((@Code%0x100000)/0x10000)*0x1000+((@Code%0x4000)/0x100)*0x40+@Code%0x40
SET @output=@output+NCHAR(@Code)
Set @Code=0
Set @CodeLength=0
end
end
SET @block_start = @block_start + 4
END
IF RIGHT(@encoded_text,2)='=='
SET @decoded_length=@decoded_length-2
ELSE IF RIGHT(@encoded_text,1)='='
SET @decoded_length=@decoded_length-1
RETURN LEFT(@output ,@decoded_length)
END
- 浏览: 1578185 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (603)
- T_java (145)
- T_script&ASP (51)
- T_C/C++ (25)
- T_PowerBuilder (11)
- T_Database (53)
- T_odoo (7)
- T_应用服务器 (50)
- T_专_条形码 (6)
- T_专_负载均衡器 (4)
- T_操作系统 (94)
- T_信息安全 (41)
- T_专_搜索引擎 (14)
- T_L_PHP (58)
- T_L_Delphi (18)
- T_L_.NET、C#、VisualStudio (25)
- T_L_Objective-C (6)
- T_移动开发 (53)
- T_网络 (109)
- T_大数据 (2)
- T_嵌入式 (2)
- T_小众技术 (24)
- T_未分类 (58)
- L_旅游印记 (1)
- L_生活随笔 (48)
- L_中国文化 (18)
- L_户外与生存 (0)
最新评论
-
csbean4004:
不知道哪传来得恶习,发帖子不好好发,故意弄错一些东西,很讨厌
让HTML5支持后置摄像头 -
withthewind:
终于找到一个可以用的了。。。
如何用VBA取得Word文档中的标题前面的序号 -
busbby:
兄弟,无法下载,说文件不完整
一个好用的Outlook ost格式文件转pst文件的工具 -
yijavakevin:
密码啊~解压密码多少?
一个二维条形码组件 -
vipbooks:
你给的那个链接根本无法下载,跳到官网看了下最新版12M,但点下 ...
十步以内完成精细web打印
SQL Server Base64函数
- 博客分类:
- T_Database
发表评论
-
十步以内完成精细web打印
2017-06-21 11:44 7291注意: 康虎云报表组 ... -
MySQL正则替换函数
2017-05-24 13:01 1925DELIMITER $$ CREATE FUNCTION ... -
MySQL 对比数据库表结构
2017-02-14 17:41 1266MySQL 对比数据库表结 ... -
浏览器端精准打印或套打组件
2017-01-18 13:05 6641注意: 康虎云报表 ... -
在MySQL中全库搜索指定字符串
2016-11-13 07:47 2474有时候,需要从整个MySQL库中搜索某一字符串,但却不知道 ... -
Sql注入之sqlmap+dvwa实例演练
2016-10-27 16:27 1481Sql注入之sqlmap+dvwa实例演练 相信 ... -
在Ubuntu 16.04上安装Odoo8(附自动安装脚本)
2016-06-09 13:02 2498在Ubuntu 16.04上安装Odoo8 一、安 ... -
ODOO9 SAAS 全自动安装脚本 基于Ubuntu 14.04 LTS
2016-05-09 10:37 2423install-odoo-saas.sh #! ... -
MySQL同类记录获取最新一条
2016-03-28 13:36 1478表结构如下: MySQL> SELECT * FRO ... -
Mybatis Generator配置详解(中文)_转
2015-12-17 16:44 869来自: http://www.jianshu.com/p/e ... -
一个提供大量数据模型的网站
2015-12-17 14:00 891网站地址是:http://www.databaseansw ... -
Odoo安装脚本
2015-08-17 23:25 1191#!/bin/bash ################# ... -
MyBatis配置文件修改侦测及重载的实现
2015-07-31 13:53 2281MyBatis配置文件修改侦测及重载的实现: /** ... -
Hive安装配置过程中出现的错误
2015-05-30 22:11 11651、hive CLI启动时报错:(hadoop-2.6+ ... -
Hibernate计算从表记录数
2015-03-30 10:01 622有一个主表,其中一个字段是从表对应的记录数,为 ... -
一个异构数据库的集群中间件(转)
2014-12-22 14:41 817Product: Sequoia Database C ... -
在MS SQLServer中创建链接服务器
2014-12-03 15:11 883要在MS SQLServer中使用链接服务器,对方数据库使用 ... -
在SQLServer上,把从表某字段拼成一个值
2014-07-14 10:08 702--> 测试数据:[father] if ob ... -
SQL Server Base64函数
2014-06-06 11:58 1258IF OBJECT_ID(N'dbo.c_GetUTF8Co ... -
Oracle自动备份脚本
2014-03-31 19:06 788@echo off REM ############ ...
相关推荐
NULL 博文链接:https://nannan408.iteye.com/blog/1995714
三种算法都可以很简单地实现,拒绝冗长的函数代码。 自己整理的东东,决不是随手粘贴来的,多收点分哈。如果正能对你的项目有所帮助,相信是值得滴~
Microsoft SQL Server 2005 Express Edition SQL Server 文档小组无法回答技术支持问题,但是欢迎您对本自述文档提出建议和意见。您可以使用提供的链接快速、直接地发送电子邮件反馈。请使用英语发送您的反馈信息...
修改win_mkdir.bat文件,以便生成存放生成脚本的基本目录及其子目录 win_mkdir.bat文件生成上面所需要的所有目录 打开win_mkdir.bat文件,修改BASE_DIC变量的值,如c:\temp\,该目录是存放生成的脚本文件...
MSSQL2008常用自定义加密函数 支持16 32位结果 md2 md4 md5 sha sha1 base64等几种加密 编码方式 比如 dbo md5 "xxx" 16 返回16位的md5加密结果;dbo sha "xxx" 32 32位sha编码
对数据库ChinaGas 中历史表t_base_History进行数据分表存储,按字段CollectDate不同的时间进行存储,建立数据库分组CGdbSF1~CGdbSF7,分组文件如CGdbSF1.ndf,建立分区函数CG_function,分区方案CG_scheme
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // } /// /// 清理所有正在使用的资源。 /// protected override void Dispose( bool disposing ) { if( disposing ) { ...
数据库基础与应用-SQL SERVER2000. 机械工业出版社出版 指导教师 签名日期 年 月 日 系 主 任 审核日期 年 月 日 ----------------------- 数据库课程设计--图书管理系统全文共3页,当前为第1页。 数据库课程设计--...
在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块,不过有一点不同的是,触发器是隐式调用的,并不能接收参数。 触发器优点 (1)触发器能够实施的检查和操作比主键和外键约束、...
//获得当前网段内的SQLSERVER服务器列表 function string GetSQLServerList() library 'extlib.dll' ALIAS FOR "GetSQLServerList;Ansi" //base64编码 function Integer Base64EnCode(string as_code,string Code...
一名入门的asp.net程序员应该掌握的知识: (1)熟练使用Sql Server中企业管理器、查询分析器和事件探查器,能熟练编写T-SQL、存储过程、用户自定义函数、视图、触发器; (2)了解ASP.net服务器控件的生命周期; ...
一名入门的asp.net程序员应该掌握的知识: (1)熟练使用Sql Server中企业管理器、查询分析器和事件探查器,能熟练编写T-SQL、存储过程、用户自定义函数、视图、触发器; (2)了解ASP.net服务器控件的生命周期; ...
很容易的得到SQL函数的列表和用法描述(Show SQL help Window 按钮) 可以查看SQL语句的执行情况:通过下方的AutoTrace窗口 ,看到SQL语句的实际执行结果和执行效率。 支持历史SQL(F8) :可以方便的查询以前...
SQL Server的每个数据库只有一个主数据文件,扩展名为.mdb。 . 辅数据文件: SQL Server数据库管理系统中,所有不适合存储在主数据文件中的数据都存储在辅数据文件中。如果主数据文件可以包含所有的数据,可不用辅...
实例187 通过mssql_connect()函数连接SQL Server数据库 293 实例188 通过ADO方式实现指定时间段的信息检索 294 实例189 通过函数实现商品信息的检索 296 实例190 通过ADO方式实现输入页码跳转到指定页 297 ...
Base64编解码 Bios信息 BMP滤镜模块 BoyChong-神2多方式取IP模块 BoyChong专用常用模块2.0 保存图片1.0 本土化易模块 保证显示 比较大小 编辑标准格式公文2.0 编辑框辅助功能 编码转换大全 变速模块 冰川...
常用加解密、编解码(DES、MD5、SHA、BASE64) 批量提取文本,支持正则表达式,可将HTML等文件中指定内容存入数据库 批量查找替换,支持正则表达式 批量文件、文件夹改名,支持正则表达式 正则表达式测试器...
常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中,让你的组件也可以绑定 .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN...