2014. 5. 8. 08:52ㆍIT
/****************************************************
BASE 64 ENCODE 쿼리
****************************************************/
CREATE FUNCTION dbo.fn_BASE64_ENC
(
@InputStrings varchar(8000)
)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @ConvertTable varchar(128)
,@ReturnStrings varchar(8000)
,@InputBinary varbinary(8000)
,@InputSize int
,@Count int
,@Before1 binary(1)
,@Before2 binary(1)
,@Before3 binary(1)
,@After1 int
,@After2 int
,@After3 int
,@After4 int
SET @ConvertTable = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ 'abcdefghijklmnopqrstuvwxyz'
+ '0123456789+/='
SET @InputBinary = CAST(@InputStrings AS varbinary(8000))
SET @InputSize = DATALENGTH(@InputBinary)
SET @Count = 1
SET @ReturnStrings = ''
IF @InputStrings <>'' or @InputStrings is not null
BEGIN
WHILE (0=0) BEGIN
IF @Count > @InputSize BREAK
SET @Before1 = SUBSTRING(@InputBinary, @Count, 1)
IF @Count + 1 > @InputSize BEGIN
SET @Before2 = NULL
END
ELSE BEGIN
SET @Before2 = SUBSTRING(@InputBinary, @Count + 1, 1)
END
IF @Count + 2 > @InputSize BEGIN
SET @Before3 = NULL
END
ELSE BEGIN
SET @Before3 = SUBSTRING(@InputBinary, @Count + 2, 1)
END
SET @After1 = (@Before1 & 252) / 4
SET @After2 = (@Before1 & 3) * 16
+ (ISNULL(@Before2, 0x00) & 240) / 16
SET @After3 = (@Before2 & 15) * 4
+ (ISNULL(@Before3, 0x00) & 192) / 64
SET @After4 = (ISNULL(@Before3, 0x00) & 63) * 1
SET @ReturnStrings = @ReturnStrings
+ SUBSTRING(@ConvertTable, @After1 + 1, 1)
+ SUBSTRING(@ConvertTable, @After2 + 1, 1)
+ CASE WHEN @Before2 IS NULL AND @Before3 IS NULL
THEN '='
ELSE SUBSTRING(@ConvertTable, @After3 + 1, 1)
END
+ CASE WHEN @Before3 IS NULL
THEN '='
ELSE SUBSTRING(@ConvertTable, @After4 + 1, 1)
END
SET @Count = @Count + 3
END
END
RETURN @ReturnStrings
END
/****************************************************
BASE 64 ENCODE 쿼리
****************************************************/
CREATE FUNCTION [dbo].[fn_BASE64_DEC]
(
@MimeText VARCHAR(8000)
)
RETURNS VARCHAR(6000)
AS
BEGIN
-- © 2006 Peter Larsson, Developer Workshop, all rights reserved
DECLARE @Characters VARCHAR(64), @Index SMALLINT,
@m1 TINYINT, @m2 TINYINT, @m3 SMALLINT, @m4 SMALLINT,
@p1 TINYINT, @p2 TINYINT, @p3 TINYINT,
@PlainText VARCHAR(6000), @Paddings TINYINT
SELECT @Characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
@MimeText = REPLACE(REPLACE(@MimeText, CHAR(13), ''), CHAR(10), ''),
@Index = DATALENGTH(@MimeText) - 3,
@Paddings = DATALENGTH(@MimeText) - DATALENGTH(REPLACE(@MimeText, '=', '')),
@PlainText = ''
WHILE @Index > 0
SELECT @m1 = CHARINDEX(CAST(SUBSTRING(@MimeText, @Index, 1) AS BINARY(1)), CAST(@Characters AS BINARY(64))) - 1,
@m2 = CHARINDEX(CAST(SUBSTRING(@MimeText, @Index + 1, 1) AS BINARY(1)), CAST(@Characters AS BINARY(64))) - 1,
@m3 = CHARINDEX(CAST(SUBSTRING(@MimeText, @Index + 2, 1) AS BINARY(1)), CAST(@Characters AS BINARY(64))) - 1,
@m4 = CHARINDEX(CAST(SUBSTRING(@MimeText, @Index + 3, 1) AS BINARY(1)), CAST(@Characters AS BINARY(64))) - 1,
@p1 = (@m1 & 63) * 4 + (@m2 & 48) / 16,
@p2 = (@m2 & 15) * 16 + (@m3 & 60) / 4,
@p3 = (@m3 & 3) * 64 + (@m4 & 63),
@PlainText = CHAR(@p1) + CHAR(@p2) + CHAR(@p3) + @PlainText,
@Index = @Index - 4
RETURN LEFT(@PlainText, DATALENGTH(@PlainText) - @Paddings)
END
'IT' 카테고리의 다른 글
[JavaScript] input file 파일 확인 (0) | 2014.05.29 |
---|---|
[MSSQL] 랜덤 난수 생성 (0) | 2014.05.14 |
[MSSQL] 숫자만 뽑아내는 함수 (0) | 2014.03.21 |
[MSSQL] 0으로 나누기 오류가 발생 (0) | 2014.03.20 |
[MSSQL] 주민등록번호 유효성 체크 (0) | 2014.03.19 |