2008-10-20 21 views
11

Estoy buscando una manera de transformar una cadena genuina en su valor hexadecimal en SQL. Estoy buscando algo que es Informix-amable, pero me gustaría, obviamente, prefiere algo de base de datos neutroConvertir una cadena a HEX en SQL

Aquí es el selecto estoy usando ahora:

SELECT SomeStringColumn from SomeTable 

Aquí es el selecto me gustaría usar: hexagonal SELECT (SomeStringColumn) de alguna_tabla

Por desgracia nada es así de simple ... Informix me da ese mensaje: de caracteres a un error de conversión numérica

¿Alguna idea?

+1

el hexágono es convertir un entero (o INT8 o BIGINT) a una cadena hexadecimal. ¿Qué busca como resultado de HEX_STRING ("xyz")? –

+0

Además, es cortés seleccionar una respuesta, o si nada responde a su pregunta, es sensato editar su pregunta para que pueda entenderse. Deberías intentar seleccionar una mejor respuesta, por favor. –

+0

Debe volver a formular su pregunta. Obviamente, no desea interpretar la cadena como un número ("12" -> 12). Parece que quieres convertir los bytes subyacentes a hexadecimal. ("abc" -> hex). ¿Desea códigos ASCII, Unicode, algo más? Se específico. – colithium

Respuesta

17

¿Se puede usar Cast y fn_varbintohexstr?

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

No estoy seguro si tiene esa función en su sistema de base de datos, está en MS-SQL.

he intentado en mi MMC servidor SQL en una de mis tablas:

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

Esto funcionó como se esperaba. posiblemente lo que sé como master.dbo.fn_varbintohexstr en MS-SQL, que podría ser similar a la función Informix hexagonal(), por lo que posiblemente intente:

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

Creo que respondió la pregunta que quería hacer. +1 – colithium

+2

Incluso en MSSQL, esta función no es compatible/documentada. No se recomienda el uso de la función si necesita compatibilidad con versiones futuras del servidor MS SQL – Faiz

0

Si es posible para usted para hacer esto en el cliente de base de datos en código, podría ser más fácil.

De lo contrario, el error probablemente signifique que la función incorporada hexadecimal no puede funcionar con sus valores como esperaba. Verificaría que el valor de entrada esté recortado y en el formato primero, podría ser así de simple. Luego consultaría la documentación de la base de datos que describe la función hexadecimal y vería cuál sería su entrada esperada y compararía eso con algunos de sus valores y descubriría cuál es la diferencia y cómo cambiar sus valores para que coincidan con los de la entrada esperada.

Una simple búsqueda en google de "función hexadecimal informix" hizo aparecer la primera página de resultados con la frase: "Debe ser un entero literal o alguna otra expresión que devuelva un entero". Si su tipo de datos es una cadena, primero convierta la cadena en un entero. Parece que a primera vista haces algo con la función de reparto (no estoy seguro de esto).

select hex(cast SomeStringColumn as int)) from SomeTable 
+0

Desafortunadamente, su solución solo funcionaría si la cadena es realmente un número que no es mi caso ... –

0

antiguo puesto, pero en mi caso también Tuve que eliminar la parte 0x del hexágono, así que usé el siguiente código. (Estoy usando MS SQL) Función

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