SQL Server获取下一个编码字符实现继续重构与增强
IF OBJECT_ID(N'dbo.ufn_GetCharTable', 'TF') IS NOT NULL
BEGIN
DROP FUNCTION dbo.ufn_GetCharTable;
END
GO --==================================
-- 功能: 获取字符映射表表值函数
-- 说明: 编码字符只包含0-9和A-Z这两类字符
-- 将以上字符映射到对应十进制数值。
-- 作者: XXX
-- 创建: yyyy-MM-dd
-- 修改: yyyy-MM-dd XXX 修改内容描述
-- 调用: SELECT CodeChar, CodeValue FROM dbo.ufn_GetCharTable();
--==================================
CREATE FUNCTION dbo.ufn_GetCharTable
(
) RETURNS @tblChar TABLE (
[Char] CHAR() NOT NULL,
Value TINYINT NOT NULL
)
--$Encode$--
AS
BEGIN
DECLARE
@intStartIndexID AS TINYINT,
@intEndIndexID AS TINYINT; SELECT
@intStartIndexID = ,
@intEndIndexID = ; -- 初始化0-9数字字符
SELECT
@intStartIndexID = ASCII(''),
@intEndIndexID = ASCII('');
WHILE @intStartIndexID <= @intEndIndexID
BEGIN
INSERT INTO @tblChar ([Char], Value)
VALUES (CHAR(@intStartIndexID), ); SET @intStartIndexID = @intStartIndexID + ;
END -- 初始化A-Z字母字符
SELECT
@intStartIndexID = ASCII('A'),
@intEndIndexID = ASCII('Z');
WHILE @intStartIndexID <= @intEndIndexID
BEGIN
INSERT INTO @tblChar ([Char], Value)
VALUES (CHAR(@intStartIndexID), ); SET @intStartIndexID = @intStartIndexID + ;
END -- 修改每个字符对应的10进制整数值
;WITH tCodeData AS (
SELECT [Char], ROW_NUMBER() OVER (ORDER BY [Char] ASC) AS RowNum
FROM @tblChar
) UPDATE T2
SET T2.Value = T.RowNum -
FROM tCodeData AS T
INNER JOIN @tblChar AS T2
ON T.[Char] = T2.[Char]; RETURN;
END
GO
IF OBJECT_ID(N'dbo.ufn_GetCodeCharsValue', 'FN') IS NOT NULL
BEGIN
DROP FUNCTION dbo.ufn_GetCodeCharsValue;
END
GO --==================================
-- 功能: 获取编码字符串对应的10进制整数数值
-- 说明: 具体实现阐述
-- 作者: XXX
-- 创建: yyyy-MM-dd
-- 修改: yyyy-MM-dd XXX 修改内容描述
-- 调用: SELECT dbo.ufn_GetCodeIntegerValue('A0000')
--==================================
CREATE FUNCTION dbo.ufn_GetCodeCharsValue
(
@chvCodeChars VARCHAR() -- 编码字符串 ) RETURNS INT
--$Encode$--
AS
BEGIN
SET @chvCodeChars = ISNULL(@chvCodeChars, '');
SET @chvCodeChars = UPPER(@chvCodeChars); DECLARE @intCodeCharsValue AS BIGINT;
SET @intCodeCharsValue = ; DECLARE @tintLength AS TINYINT;
SET @tintLength = LEN(@chvCodeChars); IF @tintLength =
BEGIN
RETURN @intCodeCharsValue;
END DECLARE @tblChar TABLE(
[Char] CHAR() NOT NULL,
Value TINYINT NOT NULL
); INSERT INTO @tblChar ([Char], Value)
SELECT [Char], Value
FROM dbo.ufn_GetCharTable(); -- 编码字符串的首字母必须是A-Z字母字符的逻辑检查
IF NOT EXISTS (SELECT FROM @tblChar WHERE [Char] = SUBSTRING(@chvCodeChars, , ) AND Value >= )
BEGIN
RETURN @intCodeCharsValue;
END WHILE @tintLength >=
BEGIN
SELECT @intCodeCharsValue = @intCodeCharsValue + CAST(Value * POWER(, @tintLength - ) AS BIGINT)
FROM @tblChar
WHERE [Char] = SUBSTRING(@chvCodeChars, , ); SET @chvCodeChars = STUFF(@chvCodeChars, , , ''); SET @tintLength = @tintLength - ;
END RETURN @intCodeCharsValue;
END
GO
获取编码字符串长度和整数值范围表函数
IF OBJECT_ID(N'dbo.ufn_GetCodeCharsValueTable', 'TF') IS NOT NULL
BEGIN
DROP FUNCTION dbo.ufn_GetCodeCharsValueTable;
END
GO --==================================
-- 功能: 获取编码字符串不同长度对应的整数值范围
-- 说明: 具体实现阐述
-- 作者: XXX
-- 创建: yyyy-MM-dd
-- 修改: yyyy-MM-dd XXX 修改内容描述
-- 调用: SELECT StartValue, EndValue, FixLength FROM dbo.ufn_GetCodeCharsValueTable();
--==================================
CREATE FUNCTION dbo.ufn_GetCodeCharsValueTable
( ) RETURNS @tblCodeCharValue TABLE (
StartValue INT NOT NULL,
EndValue INT NOT NULL,
FixLength TINYINT NOT NULL
)
AS
BEGIN
DECLARE
@tintLength AS TINYINT,
@tintMaxLength AS TINYINT;
SELECT
@tintLength = ,
@tintMaxLength = ; WHILE @tintLength <= @tintMaxLength
BEGIN
INSERT INTO @tblCodeCharValue (StartValue, EndValue, FixLength)
VALUES (dbo.ufn_GetCodeCharsValue(CONCAT('A', REPLICATE('', @tintLength - ))), dbo.ufn_GetCodeCharsValue(CONCAT('Z', REPLICATE('Z', @tintLength - ))), @tintLength); SET @tintLength = @tintLength + ;
END RETURN;
END
GO
IF OBJECT_ID(N'dbo.ufn_GetCodeChars', 'FN') IS NOT NULL
BEGIN
DROP FUNCTION dbo.ufn_GetCodeChars;
END
GO --==================================
-- 功能: 获取一个整数值对应的编码字符串
-- 说明: 具体实现阐述
-- 作者: XXX
-- 创建: yyyy-MM-dd
-- 修改: yyyy-MM-dd XXX 修改内容描述
--==================================
CREATE FUNCTION dbo.ufn_GetCodeChars
(
@intCodeCharsValue INT -- 编码字符串整数值
) RETURNS VARCHAR()
--$Encode$--
AS
BEGIN
SET @intCodeCharsValue = ISNULL(@intCodeCharsValue, );
DECLARE @chvCodeChars AS VARCHAR();
SET @chvCodeChars = ''; -- 整数值长度变量
DECLARE @tintFixLength AS TINYINT;
SET @tintFixLength = ; SELECT @tintFixLength = FixLength
FROM dbo.ufn_GetCodeCharsValueTable()
WHERE @intCodeCharsValue BETWEEN StartValue AND EndValue; -- 整数值范围的逻辑检查
IF @tintFixLength =
BEGIN
RETURN @chvCodeChars;
END DECLARE @tblChar TABLE(
[Char] CHAR() NOT NULL,
Value TINYINT NOT NULL
); INSERT INTO @tblChar ([Char], Value)
SELECT [Char], Value
FROM dbo.ufn_GetCharTable(); DECLARE @tintPerCodeValue TINYINT;
SET @tintPerCodeValue = ; WHILE @tintFixLength >=
BEGIN
SET @tintPerCodeValue = @intCodeCharsValue / POWER(, @tintFixLength - ); SELECT TOP @chvCodeChars = @chvCodeChars + [Char], @tintPerCodeValue = Value
FROM @tblChar
WHERE Value <= @tintPerCodeValue
ORDER BY Value DESC; SET @intCodeCharsValue = @intCodeCharsValue - @tintPerCodeValue * POWER(, @tintFixLength - ); SET @tintFixLength = @tintFixLength - ;
END RETURN @chvCodeChars;
END
GO
DECLARE @chvCodeChars AS VARCHAR();
SET @chvCodeChars = CONCAT('A', REPLICATE('', - ));
DECLARE @intCodeCharsValue AS INT;
SET @intCodeCharsValue = dbo.ufn_GetCodeCharsValue(@chvCodeChars); SELECT @chvCodeChars AS CurrentCodeChars, @intCodeCharsValue AS CurrentCodeCharsValue, dbo.ufn_GetCodeChars(@intCodeCharsValue + ) AS NextCodeChars
GO


SQL Server获取下一个编码字符实现继续重构与增强的更多相关文章
- SQL Server获取下一个编码字符实现
周末看到SQL Server 大V潇湘隐者的获取下一个编码字符串问题,本来作为以上博文的回复,也许回复内容长度超过其允许限制,无法提交.鉴于此,特记录SQL Server实现过程,方便自己回顾和查阅. ...
- SQL Server获取下一个编码字符串的实现方案分割和进位
我在前一种解决方案SQL Server获取下一个编码字符实现和后一种解决方案SQL Server获取下一个编码字符实现继续重构与增强两篇博文中均提供了一种解决编码的方案,考虑良久对比以上两种方 ...
- 【转】sql server 获取每一个类别中值最大的一条数据
/* 数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3:a的第三个值 b 1 b1--b的第一个值 b 3 b3:b的第三个值 b 2 ...
- sql server 获取每一个类别中值最大的一条数据
/* 数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3:a的第三个值 b 1 b1--b的第一个值 b 3 b3:b的第三个值 b 2 ...
- 第1/24周 SQL Server 如何执行一个查询
大家好,欢迎来到第1周的SQL Server性能调优培训.在我们进入SQL Server性能调优里枯燥难懂的细节内容之前,我想通过讲解SQL Server如何执行一个查询来建立基础.这个部分非常重要, ...
- 第1周 SQL Server 如何执行一个查询
原文:第1周 SQL Server 如何执行一个查询 大家好,欢迎来到第1周的SQL Server性能调优培训.在我们进入SQL Server性能调优里枯燥难懂的细节内容之前,我想通过讲解SQL Se ...
- SQL Server 2008下日志清理方法 2
SQL Server 2008下日志清理方法 (2011-07-14 10:30:45) 转自 http://blog.sina.com.cn/s/blog_4bdd3d0b0100wfvq.html ...
- SQL Server获取索引创建时间&重建时间&重组时间
之前写过一篇博客"SQL Server中是否可以准确获取最后一次索引重建的时间?",里面主要讲述了三个问题:我们能否找到索引的创建时间?最后一次索引重建(Index Rebuild ...
- SQLServer数据库之SQL Server 获取本周,本月,本年等时间内记录
本文主要向大家介绍了SQLServer数据库之SQL Server 获取本周,本月,本年等时间内记录,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. datediff(we ...
随机推荐
- AIX 文件 打包 与 压缩 tar gzip compress 的使用
今天在Aix用tar -cvf 备份,打成tar包,占有硬盘空间过大,没有压缩比, 尝试使用tar -zcvf linux系统下可以用-z 命令 (z 用gzip来压缩/解压缩文件,加上该选项后可以 ...
- [转]C#调用FFMPEG,并异步读取输出信息的代码
http://www.cnblogs.com/Leo_wl/archive/2011/12/31/2308841.html
- Javascript事件模型系列(四)我所理解的javascript自定义事件
被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...
- Oracle存在修改,不存在插入记录
接触编程以来,在数据存储方面一直用的MS SQL.Oracle这名字对我来说是如此的熟悉,但是对其内容却很陌生,最近公司的一个项目用起了Oracle,所以也开始高调的用起了Oracle.在没有接触Or ...
- 为 WSUS 服务器定期运行清理向导
在 WSUS 的管理界面的 Options 里面,可以找到 Server Cleanup Wizard 然后运行.后来想了一下,为什么不把它弄成定期运行呢! 找了一下,从 Windows Server ...
- C++函数指针
然后,我在想C++函数指针到底有啥用呢.想了又想,我想出来一种,就是将函数地址(函数n)作为函数(函数1)的参数时,便可以在访问函数1的时候就决定了,在函数1里面调用的是哪一个函数(函数1,2,3,4 ...
- CefSharp .net
构建基于Chromium的应用程序 chromium是google chrome浏览器所采用的内核,最开始由苹果的webkit发展而出,由于webkit在发展上存在分歧,而google希望在开发上有更 ...
- fir.im Weekly - 深度揭秘 App 启动全过程
世纪寒潮席卷全中国,可谓普天之下莫低0℃.无论怎样的严寒都抵挡不了程序员们的创造的激情... 本期的 fir.im Weekly ,最新的 iOS/Android 开发资源,GitHub 源码.前端技 ...
- artTemplate 这么叼
artTemplate 这么叼 高性能JavaScript模板引擎原理解析 http://www.itfeed.com/blog/10016.html
- 深入理解PHP内核(四)概览-PHP脚本的执行
本文链接:http://www.orlion.ml/236/ 下面以php命令行程序为例解释PHP脚本是怎么被执行的.例如如下脚本: <?php $str = 'hello world'; ec ...