在网上看到SQL字符串转16进制的语句,经过小小添加,现将SQL字符串与16进制互换的方法记录,以供以后查看。
--SQL char->HEX code
DECLARE @str VARCHAR(4000)
SET @str='SELECT * FROM dbo.TaskHistory' --Your sql char
DECLARE @i INT,@Asi INT,@ModS INT,@res VARCHAR(800),@Len INT,@Cres VARCHAR(4),@tempstr VARBINARY(400)
SELECT @i = 1,@res='',@len=DATALENGTH(@str),@tempStr = CONVERT(VARBINARY,@str)
WHILE @i<=@len
BEGIN
SELECT @Asi = SUBSTRING(@tempstr,1,1),@Cres=''
WHILE @Asi <> 0
BEGIN
SELECT @Mods = @Asi %16,
@Cres=CASE WHEN (@Mods > 9) THEN CHAR(ASCII('A')+@Mods-10)+@Cres ELSE CAST(@Mods AS VARCHAR(4)) + @Cres END,
@Asi = @Asi/16
END
SELECT @res = @res + @Cres,@tempStr = SUBSTRING(@tempStr,2,@len-1),@i = @i+1
END
SELECT '0x'+@res
--HEX code->SQL char
这里使用最简单的方式,利用Cast直接转,
这里有个小小的问题,可能出现字符编码不正确或乱码,当出现这种情况时,将varchar换成nvarchar,反之亦然。
--HEX->SQL Char
DECLARE @S VARCHAR(4000);
SET @S=CAST(
0x53454C454354202A2046524F4D2064626F2E5461736B486973746F7279 --your hex code
AS VARCHAR(4000));
SELECT @S
在网上看到SQL字符串转16进制的语句,经过小小添加,现将SQL字符串与16进制互换的方法记录,以供以后查看。 --SQL char->HEX codeDECLARE @str VARCHAR(4000)SET @str=SELECT * FROM dbo.TaskHistory --Your sql charDECLARE @i INT,@Asi INT,@ModS INT,@res V
Java中的转换非常简单便捷,但有时候需要在后台实现转换,这里我包装成函数。Mark一下
–
字符串
转十六进制
CREATE FUNCTION dbo.StrTo
Hex
(@str varchar(100))
RETURNS varchar(800)
BEGIN
DECLARE @i INT,@Asi INT,@ModS INT,@res VARCHAR(800),@Len INT,@Cres VARCHAR(4),@tempstr VARBINARY(400)
SELECT @i = 1,@res=’’
--通用的做法
select sys.fn_varbinto
hex
str(0x02000000DD6BE318DC3B2B260AA9923FE133FB046EA0EEE10000000000000000000000000000000000000000)
--适合2014,不适合2005
SELECT '0x'+CONVERT(VARCHAR(MAX),0x02000000DD6BE318DC
SQL
Server 中可以使用内置函数 `PARSE` 或者 `STRING_SPLIT` 来实现分隔
字符串
。
例如,要将
字符串
"A,B,C,D" 按照 "," 进行分隔,可以使用以下代码:
SELECT value
FROM STRING_SPLIT('A,B,C,D', ',')
也可以使用 `PARSE` 函数,例如:
DECLARE @str nvarchar(50) = 'A,B,C,D';
WITH split (start, [end], value) AS
SELECT 1, CHARINDEX(',', @str),
SUBSTRING(@str, 1, CHARINDEX(',', @str) - 1)
UNION ALL
SELECT [end] + 1, CHARINDEX(',', @str, [end] + 1),
SUBSTRING(@str, [end] + 1, CHARINDEX(',', @str, [end] + 1) - [end] - 1)
FROM split
WHERE [end] > 0
SELECT value
FROM split;
这两种方法都可以用来分隔
字符串
,您可以根据实际情况选择使用。