簡體   English   中英

SQL Server 2008 R2:如何識別和更新十六進制值

[英]SQL Server 2008 R2: How to identify and update hexadecimal value

我有下面的表名為Hexa_TableHexa_Table包含一列,即val

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 ,我需要確定哪些是表中的Hexadecimal值。

例如,我有記錄號2是414F2D53594F545641如果你轉換它將獲得AO-SYOTVA 在第4條記錄中我有414F2D363530303035如果你轉換它將得到AO-650005

通過使用轉換:

問題
1.如何識別表中的十六進制值?
2.如何將十六進制值更新為字符串?

您可以將CONVERT與樣式1一起使用。 你的場景中有類似的東西。

您可以使用Filter 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

參考

如何將具有十六進制值的varchar轉換為int?

MSDN轉換

您可以使用以下命令在表中找到十六進制值:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM