SQL Server 2008 R2:如何识别和更新十六进制值
SQL Server 2008 R2: How to identify and update hexadecimal value
我有以下 table 称为 Hexa_Table
,它只包含一列,即 val
。
Table: Hexa_Table
CREATE TABLE Hexa_Table
(
val VARCHAR(50)
);
插入:
INSERT INTO Hexa_Table VALUES('123456789101213');
INSERT INTO Hexa_Table VALUES('414F2D53594F545641');
INSERT INTO Hexa_Table VALUES('1234F6789A1213G');
INSERT INTO Hexa_Table VALUES('414F2D363530303035');
INSERT INTO Hexa_Table VALUES('12345678910');
注意:现在我只想更新那些 Hexadecimal
的值,并想将其更新为 String
,为此我需要确定这是 table.
中的 Hexadecimal
值
例如我有记录编号 2 是 414F2D53594F545641
如果你转换它会得到 AO-SYOTVA
。在第 4 条记录中,我有 414F2D363530303035
如果你转换它将得到 AO-650005
.
转换使用:This
问题:
1.如何识别table?
中的十六进制值
2. 如何将十六进制值更新为字符串?
您可以使用以下方法在 table 中找到十六进制值:
like '%' + CHAR(0x00) +'%'
但是在您展示的示例中,值已经存储为字符串,因此我不确定将值转换为字符串是什么意思。
旁注:
如果您想知道如何将十六进制转换为 varchar,那么您需要像这样使用 CONVERT":
CONVERT(VARCHAR(MAX), 0x48656c70)
要找出十六进制值,您可以执行以下操作:
select val
from Hexa_Table
where val like '%' + CHAR(0x00) +'%'
它已经存储为VARCHAR
,你想更新什么以及如何更新?
试试这个代码:
BEGIN TRAN
SELECT * FROM Hexa_Table
WHERE val = @value_insert
IF (@@ROWCOUNT = 0)
INSERT Hexa_Table
SELECT CONVERT(VARCHAR(50), @value_insert)
COMMIT
您可以将 CONVERT
与样式 1
结合使用。在你的场景中是这样的。
您可以使用过滤器 NOT LIKE '%[^0-9a-f]%'
来匹配精确的十六进制模式,并使用 LEN(val) %2 = 0
检查它是否具有 convert
所需的确切字节数
SELECT val,
CAST(CONVERT(varbinary(4), '0x' + val, 1) As VARCHAR(100)) as charstring,
CONVERT(varbinary(4), '0x' + val, 1) as HexVal
FROM Hexa_Table
WHERE val NOT LIKE '%[^0-9a-f]%'
AND LEN(val) %2 = 0;
输出:
val charstring HexVal
414F2D53594F545641 AO-S 0x414F2D53
414F2D363530303035 AO-6 0x414F2D36
参考
How can I convert a varchar with hexadecimal value to int?
我有以下 table 称为 Hexa_Table
,它只包含一列,即 val
。
Table: Hexa_Table
CREATE TABLE Hexa_Table
(
val VARCHAR(50)
);
插入:
INSERT INTO Hexa_Table VALUES('123456789101213');
INSERT INTO Hexa_Table VALUES('414F2D53594F545641');
INSERT INTO Hexa_Table VALUES('1234F6789A1213G');
INSERT INTO Hexa_Table VALUES('414F2D363530303035');
INSERT INTO Hexa_Table VALUES('12345678910');
注意:现在我只想更新那些 Hexadecimal
的值,并想将其更新为 String
,为此我需要确定这是 table.
Hexadecimal
值
例如我有记录编号 2 是 414F2D53594F545641
如果你转换它会得到 AO-SYOTVA
。在第 4 条记录中,我有 414F2D363530303035
如果你转换它将得到 AO-650005
.
转换使用:This
问题:
1.如何识别table?
中的十六进制值
2. 如何将十六进制值更新为字符串?
您可以使用以下方法在 table 中找到十六进制值:
like '%' + CHAR(0x00) +'%'
但是在您展示的示例中,值已经存储为字符串,因此我不确定将值转换为字符串是什么意思。
旁注:
如果您想知道如何将十六进制转换为 varchar,那么您需要像这样使用 CONVERT":
CONVERT(VARCHAR(MAX), 0x48656c70)
要找出十六进制值,您可以执行以下操作:
select val
from Hexa_Table
where val like '%' + CHAR(0x00) +'%'
它已经存储为VARCHAR
,你想更新什么以及如何更新?
试试这个代码:
BEGIN TRAN
SELECT * FROM Hexa_Table
WHERE val = @value_insert
IF (@@ROWCOUNT = 0)
INSERT Hexa_Table
SELECT CONVERT(VARCHAR(50), @value_insert)
COMMIT
您可以将 CONVERT
与样式 1
结合使用。在你的场景中是这样的。
您可以使用过滤器 NOT LIKE '%[^0-9a-f]%'
来匹配精确的十六进制模式,并使用 LEN(val) %2 = 0
检查它是否具有 convert
SELECT val,
CAST(CONVERT(varbinary(4), '0x' + val, 1) As VARCHAR(100)) as charstring,
CONVERT(varbinary(4), '0x' + val, 1) as HexVal
FROM Hexa_Table
WHERE val NOT LIKE '%[^0-9a-f]%'
AND LEN(val) %2 = 0;
输出:
val charstring HexVal
414F2D53594F545641 AO-S 0x414F2D53
414F2D363530303035 AO-6 0x414F2D36
参考
How can I convert a varchar with hexadecimal value to int?