2010-11-08 11 views
0

J'ai une table HSQLDB dans laquelle l'adresse MAC est stockée en tant que varchar, ce qui n'est pas très efficace. Je voudrais le convertir en BIGINT, mais je n'ai trouvé aucune fonction de conversion de VARCHAR hex à BIGINT/INTEGER. J'ai essayé d'utiliser convert comme ceci: convert (client_mac, BIGINT), mais il échoue avec le premier non-chiffre rencontré. Est-ce que quelqu'un a une idée?HSQLDB - Conversion de l'adresse MAC HEX VARCHAR en BIGINT

Merci,

Répondre

0

Je me suis trouvé une solution:

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

C'est le genre d'une solution de contournement, parce que la première façon qui me vient à l'esprit pour le faire est la suivante:

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

Mais cela jette cette erreur:

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) 

Il semble que le problème est avec le deuxième paramètre. Cependant, le premier fonctionne bien.

+0

La trace de la pile montre une ancienne version de HSQLDB. Il n'y a aucun problème avec la deuxième requête lorsqu'il est utilisé avec une version actuelle de HSQLDB. – fredt