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的主要内容,如果未能解决你的问题,请参考以下文章