【问题标题】:Converting a String to HEX in SQL在 SQL 中将字符串转换为十六进制
【发布时间】:2010-09-18 04:02:37
【问题描述】:

我正在寻找一种将真正的字符串转换为 SQL 中的十六进制值的方法。我正在寻找对 Informix 友好的东西,但我显然更喜欢数据库中立的东西

这是我现在使用的选择:

SELECT SomeStringColumn from SomeTable

这是我想使用的选择: 从 SomeTable 中选择 hex( SomeStringColumn )

不幸的是,没有这么简单... Informix 给了我这样的信息: 字符到数字的转换错误

有什么想法吗?

【问题讨论】:

  • HEX 函数是将 INTEGER(或 INT8 或 BIGINT)转换为十六进制字符串。你在寻找什么作为 HEX_STRING("xyz") 的输出?
  • 另外,选择一个答案是礼貌的 - 或者如果没有人回答你的问题,编辑你的问题以便理解是明智的。您的目标应该是选择一个最佳答案 - 请。
  • 你应该改写你的问题。显然您不想将字符串解释为数字(“12”-> 12)。您似乎想将底层字节转换为十六进制。 (“abc”-> 十六进制)。你想要 ASCII 码、Unicode 还是其他东西?具体一点。

标签: sql informix hex


【解决方案1】:

你可以使用 Cast 和 fn_varbintohexstr 吗?

SELECT master.dbo.fn_varbintohexstr(CAST(SomeStringColumn AS varbinary)) 
FROM SomeTable

我不确定您的数据库系统中是否有该功能,它在 MS-SQL 中。

我刚刚在我的一张表上的 SQL Server MMC 中尝试过:

SELECT     master.dbo.fn_varbintohexstr(CAST(Addr1 AS VARBINARY)) AS Expr1
FROM         Customer

这按预期工作。可能我在 MS-SQL 上称为 master.dbo.fn_varbintohexstr,可能类似于 informix hex() 函数,所以可以尝试:

SELECT     hex(CAST(Addr1 AS VARBINARY)) AS Expr1
FROM         Customer

【讨论】:

  • 我想你回答了他想问的问题。 +1
  • 即使在 MSSQL 中,也不支持/记录此功能。如果您需要与未来版本的 MS SQL server 兼容,不建议使用该函数
【解决方案2】:

以下工作在 Sql 2005 中。

select convert(varbinary, SomeStringColumn) from SomeTable

【讨论】:

  • 正确。这应该是选定的答案。
  • 这会产生一个 varbinary 结果,在 SSMS 的结果视图中显示为十六进制字符串,如 0x680065006C006C006F002C0077006F0072006C006400 - 但它仍然是二进制值,其他程序不会将其视为字符串。
  • 此外,用户询问的是 Informix,而不是 SQL Server。
【解决方案3】:

如果您可以在代码中的数据库客户端中执行此操作,可能会更容易。

否则该错误可能意味着内置的十六进制函数无法按您的预期使用您的值。我会仔细检查输入值是否被修剪,首先是格式,它可能就这么简单。然后我会查阅描述 hex 函数的数据库文档,看看它的预期输入是什么,并将其与您的一些值进行比较,找出差异是什么以及如何更改您的值以匹配预期输入的值。

简单的谷歌搜索“informix hex function”会显示第一个结果页面,其中包含以下语句:“必须是文字整数或其他返回整数的表达式”。如果您的数据类型是字符串,请先将字符串转换为整数。乍一看,您似乎使用 cast 函数做了一些事情(我不确定)。

select hex(cast SomeStringColumn as int)) from SomeTable

【讨论】:

  • 不幸的是,只有当字符串确实是不是我的情况的数字时,您的解决方案才有效...
【解决方案4】:

怎么样:

declare @hexstring varchar(max);
set @hexstring = 'E0F0C0';
select cast('' as xml).value('xs:hexBinary( substring(sql:variable("@hexstring"), sql:column("t.pos")) )', 'varbinary(max)')
from (select case substring(@hexstring, 1, 2) when '0x' then 3 else 0 end) as t(pos)

我在这里看到了这个: http://blogs.msdn.com/b/sqltips/archive/2008/07/02/converting-from-hex-string-to-varbinary-and-vice-versa.aspx

抱歉,仅适用于 >MS SQL 2005

【讨论】:

    【解决方案5】:

    旧帖子,但在我的情况下,我还必须删除十六进制的 0x 部分,所以我使用了下面的代码。 (我使用的是 MS SQL)

    convert(varchar, convert(Varbinary(MAX), YOURSTRING),2)

    【讨论】:

      【解决方案6】:

      试试这个:

      select convert(varbinary, '0xa3c0', 1)
      

      十六进制数需要有偶数位数。要解决这个问题,请尝试:

      select convert(varbinary, '0x' +  RIGHT('00000000' + REPLACE('0xa3c','0x',''), 8), 1)
      

      【讨论】:

        猜你喜欢
        • 2018-01-31
        • 2018-01-22
        • 1970-01-01
        • 2013-02-07
        • 2022-07-22
        • 1970-01-01
        • 1970-01-01
        • 2020-11-07
        相关资源
        最近更新 更多