sql [33进数→10进数変换]误読しやすいILOを除くA〜Zと数字で采番
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql [33进数→10进数変换]误読しやすいILOを除くA〜Zと数字で采番相关的知识,希望对你有一定的参考价值。
/* ********************************************
33進数(※)の文字列を10進数の数値に変換
※33進数 = 0123456789ABCDEFGHJKMNPQRSTUVWXYZ
(誤読しやすい'I','L','O'を除く)
******************************************** */
CREATE FUNCTION [dbo].[fn33DecToDec](
@NUMSTR NVARCHAR(10)
) RETURNS DECIMAL(14, 0)
AS
BEGIN
DECLARE
@DecLength INT = 33, -- ASCII('Z') - ASCII('A') + 1 - 3 + 10,
@OffsetNum0 INT = 48, -- ASCII('0'),
@OffsetNum1 INT = 55, -- ASCII('A') - 10,
@OffsetNum INT
DECLARE
@CUR_CHAR NCHAR(1), -- 変換対象文字
@LEN_NUMSTR INT = LEN(@NUMSTR), -- 変換元文字列の長さ
@RETVAL DECIMAL(14, 0) = 0, -- 自動採番結果
@R_CNT INT
SET @R_CNT = @LEN_NUMSTR
WHILE (@R_CNT > 0)
BEGIN
SET @CUR_CHAR = SUBSTRING(@NUMSTR, ABS(@R_CNT - @LEN_NUMSTR) + 1, 1)
SET @OffsetNum = CASE
WHEN @CUR_CHAR < N'A' THEN @OffsetNum0
WHEN @CUR_CHAR < N'I' THEN @OffsetNum1
WHEN @CUR_CHAR < N'L' THEN @OffsetNum1 + 1
WHEN @CUR_CHAR < N'O' THEN @OffsetNum1 + 2
WHEN @CUR_CHAR <= N'Z' THEN @OffsetNum1 + 3
ELSE @OffsetNum0
END
SET @RETVAL = @RETVAL + (POWER(CONVERT(DECIMAL(14, 0), @DecLength), @R_CNT - 1) * (ASCII(@CUR_CHAR) - @OffsetNum))
SET @R_CNT = @R_CNT - 1
END
RETURN @RETVAL
END
GO
以上是关于sql [33进数→10进数変换]误読しやすいILOを除くA〜Zと数字で采番的主要内容,如果未能解决你的问题,请参考以下文章
csharp 10进数から16进数へ
csharp 10进数から2进数へ
csharp アクセス竞合が起きやすいファイルを开く。
51nod1413 权势二进数
python 任何()を使った少しトリッキーな判定方法※见やすいが,短络评価(短路评价)しないので遅い
日本語学習 刺身