HSQLDB - 从 HEX VARCHAR MAC 地址转换为 BIGINT

Posted

技术标签:

【中文标题】HSQLDB - 从 HEX VARCHAR MAC 地址转换为 BIGINT【英文标题】:HSQLDB - Convertion from HEX VARCHAR MAC address to BIGINT 【发布时间】:2010-11-08 09:54:03 【问题描述】:

我有一个 HSQLDB 表,其中 MAC 地址存储为 varchar,效率不高。我想将其转换为 BIGINT,但我发现没有从 VARCHAR hex 到 BIGINT/INTEGER 的转换函数。我尝试像这样使用转换:convert(client_mac, BIGINT),但遇到第一个非数字时失败。有人知道吗?

谢谢,

【问题讨论】:

【参考方案1】:

我找到了解决办法:

SELECT  "java.lang.Long.decode"(concat('0x',replace(client_mac,'-',''))),
FROM    user_accounting_sessions_table

这是一种解决方法,因为我想到的第一个方法是:

SELECT  "java.lang.Long.parseLong"(replace(client_mac,'-',''),16)
FROM    user_accounting_sessions_table

但这会引发此错误:

java.lang.ArrayIndexOutOfBoundsException: 1
    at org.hsqldb.Function.setArgument(Unknown Source)
    at org.hsqldb.Parser.readTerm(Unknown Source)
    at org.hsqldb.Parser.readFactor(Unknown Source)
    at org.hsqldb.Parser.readSum(Unknown Source)
    at org.hsqldb.Parser.readConcat(Unknown Source)
    at org.hsqldb.Parser.readCondition(Unknown Source)
    at org.hsqldb.Parser.readAnd(Unknown Source)
    at org.hsqldb.Parser.readOr(Unknown Source)
    at org.hsqldb.Parser.parseExpression(Unknown Source)
    at org.hsqldb.Parser.parseSelect(Unknown Source)
    at org.hsqldb.Parser.compileSelectStatement(Unknown Source)
    at org.hsqldb.DatabaseCommandInterpreter.executePart(Unknown Source)
    at org.hsqldb.DatabaseCommandInterpreter.execute(Unknown Source)
    at org.hsqldb.Session.sqlExecuteDirectNoPreChecks(Unknown Source)
    at org.hsqldb.Session.execute(Unknown Source)
    at org.hsqldb.jdbc.jdbcStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.jdbcStatement.execute(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor35.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.onseven.dbvis.b.B.B.?(Z:2256)
    at com.onseven.dbvis.b.B.F$A.call(Z:2838)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

看来问题出在第二个参数上。 但是,第一个工作正常。

【讨论】:

堆栈跟踪显示了旧版本的 HSQLDB。与当前版本的 HSQLDB 一起使用时,第二个查询没有问题。

以上是关于HSQLDB - 从 HEX VARCHAR MAC 地址转换为 BIGINT的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SELECT 加速 HSQLDB UPDATE?

HSQLDB 中的原子插入/选择

HSQLDB UNIQUE 约束和 SQL 数组类型

org.hsqldb.HsqlException:连接异常:连接失败:java.io.EOFException

如何使用 UUID 作为 HSQLDB 列的默认值

HSQLDB 中 WHERE 和 ORDER BY 的性能问题