HSQLDB - преобразование MAC-адреса HEX VARCHAR в BIGINT - PullRequest
0 голосов
/ 08 ноября 2010

У меня есть таблица HSQLDB, в которой MAC-адрес хранится как varchar, что не совсем эффективно. Я хотел бы преобразовать его в BIGINT, но я не нашел функции преобразования из VARCHAR hex в BIGINT / INTEGER. Я попытался использовать преобразование следующим образом: convert (client_mac, BIGINT), но это не удалось с первой встречной цифрой. У кого-нибудь есть идеи?

Спасибо

1 Ответ

0 голосов
/ 08 ноября 2010

Я нашел себе решение:

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)

Кажется, что проблема со вторым параметром.Впрочем, первый работает нормально.

...