sql server - ejemplos - Servidor MS SQL: convierte la cadena HEX en entero
convert varchar to numeric sql (1)
Gracias por dar algunos ejemplos más explícitos. Por lo que puedo ver en la documentación y en Google, esto no es posible en MSSQL 2005 sin un UDF u otro código de procedimiento. En MSSQL 2008, el parámetro de estilo de la función CONVERTIR () ahora admite datos binarios, por lo que puede hacerlo directamente así:
select convert(int, convert(varbinary, ''0x89'', 1))
En versiones anteriores, sus opciones son:
- Use un UDF (TSQL o CLR; CLR podría ser más fácil para esto)
- Envuelva el SELECT en un procedimiento almacenado (pero de todos modos probablemente tendrá el equivalente a un UDF)
- Convertirlo en la aplicación frontal.
- Actualizar a MSSQL 2008
Si la conversión de los datos es solo para fines de visualización, la aplicación podría ser la solución más sencilla: el formato de los datos suele pertenecer allí de todos modos. Si debe hacerlo en una consulta, entonces un UDF es más fácil pero el rendimiento puede no ser excelente (sé que dijo que prefería no usar un UDF pero no está claro por qué). Supongo que actualizar a MSSQL 2008 solo para esto probablemente no sea realista.
Finalmente, para su información, el número de versión que incluyó es la versión de Management Studio, no el número de versión de su servidor. Para obtener eso, consulte el servidor con select @@version
o select serverproperty(''ProductVersion'')
.
Esta respuesta a lo que parece la misma pregunta:
Convertir entero a hexadecimal y hexadecimal a entero
..no funciona para mí.
No puedo ir a una cadena HEX a un entero usando MS SQL server 2005 CAST o CONVERT. ¿Me estoy perdiendo algo trivial? He buscado mucho, y lo mejor que puedo encontrar son las funciones de usuario de largo aliento para pasar de un valor de cadena hexadecimal a algo que se parece a un int decimal. Seguramente hay una forma sencilla de hacer esto directamente en una consulta utilizando funciones integradas en lugar de escribir una función de usuario.
Gracias
Editar para incluir ejemplos:
seleccione CONVERTIR (INT, 0x89)
funciona como se espera, pero
seleccione CONVERTIR (INT, ''0x'' + subcadena (msg, 66, 2)) de sometable
me atrapa:
"La conversión falló al convertir el valor de varchar ''0x89'' al tipo de datos int".
un CAST explícito adicional:
seleccione CONVERTIR (INT, CAST (''0x89'' COMO VARBINARIO))
se ejecuta, pero devuelve 813185081.
Sustituir ''Int'', ''Decimal'', etc. por ''Varbinary'' da como resultado un error. En general, las cadenas que parecen ser numéricas se interpretan como numéricas si es necesario, pero no en este caso, y no parece haber un CAST que reconozca HEX. Me gustaría pensar que hay algo simple y obvio y simplemente lo he perdido.
Microsoft SQL Server Management Studio Express 9.00.3042.00
Microsoft SQL Server 2005 - 9.00.3080.00 (Intel X86) 6 de septiembre de 2009 01:43:32 Copyright (c) 1988-2005 Microsoft Corporation Express Edition con servicios avanzados en Windows NT 5.1 (versión 2600: Service Pack 3)
Para resumir: quiero tomar una cadena hexadecimal que es un valor en una tabla y mostrarla como parte de un resultado de la consulta como un entero decimal, utilizando solo funciones definidas por el sistema, no un UDF.