LUIS FERNANDO GARCIA RODRIGUEZ ELECTIVA

Anuncio
LUIS FERNANDO GARCIA RODRIGUEZ
ELECTIVA TECNOLOGICA III
BASES DE DATO CONEXIÓN A .NET
Guia para conversión de datos en SQL SERVER 2000 - 2008
Funciones de conversión de tipos de datos
Las conversiones de tipo de datos cambian una expresión de un tipo de datos a otro y
vuelve a dar formato a la información de fecha y hora. SQL Server realiza determinadas
conversiones de tipo de datos de forma automática, que reciben el nombre de conversiones
implícitas. Por ejemplo, si compara una expresión char y otra datetime , o una expresión
smallint y otra int , o expresiones char de longitudes diferentes, SQL Server convierte
automáticamente un tipo de datos a otro.
Otras conversiones de tipo de datos deben solicitarse de forma explícita, utilizando una de
las funciones de conversión de tipos de datos incorporadas. Por ejemplo, antes de
concatenar expresiones numéricas, es necesario convertirlas a expresiones de caracteres.
SQL Server proporciona tres funciones de conversión de tipos de datos, convert , inttohex
y hextoint . Estas funciones pueden emplearse en la lista select , la cláusula where y
cualquier lugar donde se permita una expresión.
SQL Server no permite convertir ciertos tipos de datos a otros tipos de datos, ni de forma
implícita ni explícita. Por ejemplo, no se pueden convertir datos smallint a datetime , ni
datos datetime a smallint . Las conversiones no admitidas generan mensajes de error.
Uso de la función de conversión general: convert
La función de conversión general, convert , se utiliza para realizar conversiones entre una
amplia variedad de tipos de datos y especificar un nuevo formato de visualización para la
información de fecha y hora. Su sintaxis es:
convert(
datatype, expression
[,
style
] )
A continuación se muestra un ejemplo que emplea convert en la lista de selección:
select title, convert(char(5), total_sales)
from titles
where type = "trad_cook"
title
---------------------------------------Onions, Leeks, and Garlic: Cooking
Secrets of the Mediterranean
125
Fifty Years in Buckingham Palace
Kitchens
15096
Sushi, Anyone?
5405
(3 rows affected)
En este ejemplo, la columna total_sales , una columna int , se convierte a una columna char
(5) para que pueda utilizarse con la palabra clave like :
select title, total_sales
from titles
where convert(char(5), total_sales) like "15%"
and type = "trad_cook"
title
------------------------------------Fifty Years in Buckingham Palace
Kitchens
15096
(1 row affected)
Algunos tipos de datos esperan una longitud o una precisión y escala. Si no especifica una
longitud, SQL Server utiliza la longitud predeterminada 30 para los datos de caracteres y
binarios. Si no especifica una precisión o escala, SQL Server utiliza los valores
predeterminados 18 y 0, respectivamente.
Reglas de conversión
En las siguientes secciones se describen las reglas que SQL Server tiene en cuenta al
convertir tipos diferentes de información:
Conversión de datos de caracteres a un tipo de datos no de caracteres
Los datos de caracteres pueden convertirse a un tipo de datos no de caracteres (como el
monetario, fecha y hora, numérico exacto o numérico aproximado) si se componen
totalmente de caracteres que son válidos para el tipo nuevo. Los espacios en blanco
iniciales se ignoran.
Los errores de sintaxis se generan cuando los datos incluyen caracteres inaceptables. Los
siguientes son algunos ejemplos de caracteres que pueden generar errores de sintaxis:
Comas o puntos decimales en datos de números enteros
Comas en datos monetarios
Letras en datos numéricos exactos o aproximados o datos de flujo de bits
Nombres de meses mal escritos en datos de fecha y hora
Conversión de un tipo de caracteres a otro
Al convertir de un juego de caracteres multibyte a otro de un solo byte, los caracteres sin un
equivalente de un solo byte se convierten en espacios en blanco.
Las columnas text pueden convertirse explícitamente a char, nchar , varchar o nvarchar .
El límite viene determinado por la longitud máxima de los tipos de datos de caracteres, 255
bytes. Si no especifica la longitud, el valor convertido tiene una longitud predeterminada de
30 bytes.
Conversión de números a un tipo de caracteres
Los datos numéricos exactos y aproximados pueden convertirse a un tipo de caracteres. Si
el tipo nuevo es demasiado corto para albergar la cadena completa, se genera un error de
espacio insuficiente. Por ejemplo, la siguiente conversión intenta almacenar una cadena de
5 caracteres en un tipo de 1 carácter:
select convert(char(1), 12.34)
Espacio de resultado insuficiente para la conversión explícita del valor
NUMERIC '12.34' en un campo CHAR.
Redondeo durante la conversión con tipos monetarios
Los tipos money y smallmoney almacenan cuatro dígitos a la derecha del punto decimal,
pero redondean hasta la centena más próxima (.01) para fines de visualización. Cuando los
datos se convierten a un tipo monetario, se redondean hasta cuatro posiciones.
Si es posible, los datos convertidos de un tipo monetario siguen el mismo comportamiento
de redondeo. Si el tipo nuevo es un numérico exacto con menos de tres posiciones
decimales, los datos se redondean a la escala del tipo nuevo. Por ejemplo, cuando $4.50 se
convierte a un valor entero, el resultado es 4:
select convert(int, $4.50)
----------4
Los datos convertidos a money o smallmoney se supone que están en unidades monetarias
completas, como dólares, en lugar de unidades fraccionarias, como céntimos. Por ejemplo,
el valor entero 4 se convertiría al equivalente monetario de 4 dólares, no 4 céntimos, en
us_english.
Conversión de información de fecha y hora
Los datos que son reconocibles como una fecha pueden convertirse a datetime o
smalldatetime . Los nombres de meses incorrectos provocan errores de sintaxis. Las fechas
que se encuentran fuera del margen aceptable del tipo de datos generan errores de
desbordamiento aritmético.
Cuando los valores datetime se convierten a smalldatetime , se redondean al minuto más
próximo.
Conversión entre tipos numéricos
Los datos pueden convertirse de un tipo numérico a otro. Si el tipo nuevo es un numérico
exacto cuya precisión o escala no es suficiente para albergar los datos, se pueden producir
errores. Use las opciones arithabort y arithignore se para determinar el modo en que se
manipulan estos errores.
Note: Las opciones arithabort y arithignore se han redefinido para SQL Server, Versión
10.0. Si utiliza estas opciones en sus aplicaciones, examínelas para asegurarse de que
todavía funcionan correctamente.
Conversión de datos de tipo binario
Los datos binary y varbinary de SQL Server son específicos de la plataforma; el tipo de
hardware que se utiliza determina el modo en que se almacenan e interpretan los datos.
Algunas plataformas consideran el primer byte después del prefijo 0x como el más
significativo; otras consideran el primer byte como el menos significativo.
La función convert trata los datos binarios de Sybase como si fueran una cadena de
caracteres, en lugar de información numérica. convert no tiene en cuenta la importancia del
orden de los bytes al convertir una expresión binaria a un valor entero o una expresión de
número entero a un valor binario. Debido a esto, los resultados de la conversión pueden
variar de una plataforma a otra.
Antes de convertir una cadena binaria a un número entero, convert elimina su prefijo 0x. Si
la cadena se compone de un número de dígitos impar, SQL Server inserta un cero inicial. Si
los datos son demasiado largos para el tipo entero, convert los trunca. Si los datos son
demasiado cortos, convert los justifica a la derecha y los rellena con ceros.
Supongamos que se quiere convertir la cadena 0x00000100 a un número entero. En algunas
plataformas, esta cadena representa el número 1; en otras, el número 256. Dependiendo de
la plataforma que ejecute la función, convert devuelve 1 o 256 en otras.
Conversión de datos hexadecimales
Para los resultados de conversión que son fiables a través de plataformas, utilice las
funciones hextoint e inttohex .
hextoint acepta literales o variables que se componen de dígitos y las letras de la A a la F
en mayúsculas y minúsculas, con o sin un prefijo 0x. Estos son usos válidos de hextoint :
hextoint("0x00000100FFFFF")
hextoint("0x00000100")
hextoint("100")
hextoint elimina el prefijo 0x. Si los datos superan los ocho dígitos, hextoint los trunca. Si
los datos tienen menos de ocho dígitos, hextoint los justifica a la derecha y los rellena con
ceros. A continuación, hextoint devuelve el valor entero equivalente independiente de la
plataforma. Las expresiones descritas anteriormente devuelven el mismo valor, 256,
independientemente de la plataforma que ejecute la función hextoint .
La función inttohex acepta datos de valor entero y devuelve una cadena hexadecimal de 8
caracteres sin prefijo 0x. inttohex siempre devuelve los mismos resultados,
independientemente de la plataforma que se esté utilizando.
Conversión de datos image a binary o varbinary
La función convert se puede utilizar para convertir una columna image a binary o
varbinary . Los tipos de datos binary tienen una longitud máxima, que es de 255 bytes. Si
no se especifica la longitud, el valor convertido tiene una longitud predeterminada de 30
caracteres.
Errores de conversión
En las siguientes secciones se describen los tipos de errores que pueden producirse durante
las conversiones de tipos de datos.
Errores de desbordamiento aritmético y de división por cero
Los errores de división por cero se producen cuando SQL Server intenta dividir un valor
numérico por cero. Los errores de desbordamiento aritmético se generan cuando las
posiciones decimales del tipo nuevo no son suficientes para albergar los resultados. Esto
ocurre durante:
Conversiones explícitas o implícitas a tipos exactos con una precisión o escala
inferior.
Conversiones de datos explícitas o implícitas que se encuentran fuera del margen
aceptable para un tipo monetario o de fecha y hora.
Conversiones de cadenas superiores a 4 bytes mediante hextoint.
Los errores de desbordamiento aritmético y de división por cero se consideran graves,
independientemente de que se produzcan durante conversiones implícitas o explícitas. Use
la opción arithabort arith_overflow para determinar el modo en que SQL Server
manipula estos errores. El valor predeterminado, arithabort arith_overflow on , revierte
toda la transacción o lote donde se genera el error. Si define arithabort arith_overflow off
, SQL Server aborta la instrucción que origina el error, pero continúa procesando otras
instrucciones de la transacción o lote. Puede utilizar la variable global @@error para
verificar los resultados de la instrucción.
Utilice la opción arithignore arith_overflow para determinar si SQL Server muestra un
mensaje después de estos errores. El valor predeterminado, off , muestra un mensaje de
advertencia cuando se produce un error de división por cero o una pérdida de precisión. La
definición de arithignore arith_overflow on suprime los mensajes de advertencia tras
estos errores. La palabra clave arith_overflow puede omitirse sin efecto alguno.
Errores de escala
Cuando los resultados de una conversión explícita originan una pérdida de escala, los
resultados se truncan sin ninguna advertencia. Por ejemplo, cuando convierte
explícitamente un tipo numérico float , numeric o decimal a un integer , SQL Server
supone que en realidad desea que el resultado sea un número entero y trunca todos los
números a la derecha del punto decimal.
Durante las conversiones implícitas a tipos numeric o decimal , la pérdida de escala genera
un error de escala. Use la opción arithabort numeric_truncation para determinar la
gravedad de un error de ese tipo. El valor predeterminado, arithabort numeric_truncation
on , aborta la instrucción que origina el error, pero continúa procesando otras instrucciones
de la transacción o lote. Si define arithabort numeric_truncation off , SQL Server trunca
los resultados de la consulta y sigue procesando.
Errores de dominio
La función convert genera un error de dominio cuando el argumento de la función se
encuentra fuera del margen sobre el que se define la función. Esto debería ocurrir con poca
frecuencia. Conversiones entre tipos binary e integer
Los tipos binary y varbinary almacenan datos de tipo hexadecimal que se componen de un
prefijo 0x seguido de una cadena de dígitos y letras. Estas cadenas se interpretan de forma
distinta en plataformas diferentes. Por ejemplo, la cadena 0x0000100 representa 65536 en
las máquinas que consideran el byte 0 como el más significativo y 256 en las máquinas que
consideran el byte 0 como el menos significativo. La función convert y las conversiones
implícitas
Los tipos binarios pueden convertirse a valores enteros explícitamente, con la función
convert , o implícitamente. Los datos pierden el prefijo 0x y después se rellenan con ceros
si son demasiado cortos para el tipo nuevo, o se truncan si son demasiado largos.
convert y las conversiones de tipos de datos implícitas evalúan los datos binarios de forma
distinta en plataformas diferentes. Debido a esto, los resultados pueden variar de una
plataforma a otra. Emplee la función hextoint para la conversión independiente de la
plataforma de cadenas de caracteres hexadecimales a valores enteros y la función inttohex
para la conversión independiente de la plataforma de valores enteros a valores
hexadecimales. La función hextoint
La función hextoint se utiliza para las conversiones independientes de la plataforma de
datos hexadecimales a valores enteros. hextoint acepta una cadena hexadecimal válida, con
o sin un prefijo 0x, entre comillas, o el nombre de una columna de tipo de caracteres o
variable.
hextoin t devuelve el entero equivalente de la cadena hexadecimal. La función siempre
devuelve el mismo entero equivalente para una cadena de caracteres hexadecimal dada,
independientemente de la plataforma en la que se ejecute. La función inttohex
La función inttohex se utiliza para conversiones independientes de la plataforma de valores
enteros a cadenas hexadecimales. inttohex acepta cualquier expresión que dé como
resultado un número entero. La función siempre devuelve el mismo equivalente
hexadecimal para una expresión dada, independientemente de la plataforma en la que se
ejecute. Conversión de columnas image a tipos binary
La función convert puede utilizarse para convertir una columna image a binary o varbinary
. Los tipos de datos binary tienen una longitud máxima, que es de 255 bytes. Si no
especifica la longitud, el valor convertido tiene una longitud predeterminada de 30
caracteres. Conversión de otros tipos de datos al tipo de bits
Los tipos numéricos exactos y aproximados pueden convertirse al tipo de bits de forma
implícita. Los tipos de caracteres requieren una función convert explícita.
La expresión objeto de la conversión debe componerse sólo de dígitos, un punto decimal,
un símbolo monetario y un signo de suma o resta. La presencia de otros caracteres genera
errores de sintaxis.
El equivalente bit de 0 es 0. El equivalente bit de cualquier otro número es 1. Cambio del
formato de visualización de las fechas
El parámetro style de convert proporciona una gran variedad de formatos de visualización
de fechas al convertir datos datetime o smalldatetime a char o varchar . El argumento de
número proporcionado como parámetro style determina el modo en que se muestran los
datos. El año puede presentarse en dos o cuatro dígitos. Para obtener un año de 4 dígitos,
incluido el siglo (yyyy), añada 100 a un valor style .
A continuación se muestra una tabla con los posibles valores de style y la variedad de
formatos de fecha que puede utilizarse. Cuando utilice style con smalldatetime , los estilos
que incluyen segundos o milisegundos mostrarán ceros en dichas posiciones.
Tabla 10-11: Conversión de formatos de fecha con el parámetro style
Sin siglo
(yy)
Con siglo
(yyy0)
Norma
Salida
-
0 o 100
Valor predeterminado
mon dd yyyy hh:mm AM (o
PM)
1
101
EE.UU.
mm/dd/yy
2
2
Norma SQL
yy.mm.dd
3
103
Inglés/francés
dd/mm/yy
4
104
Alemán
dd.mm.yy
5
105
dd-mm-yy
6
106
dd mon yy
7
107
mon dd, yy
8
108
hh:mm:ss
-
9 o 109
Valor predeterminado +
milisegundos
mon dd yyyy hh:mm:sss AM
(o PM)
10
110
EE.UU.
mm-dd-yy
11
111
Japón
yy/mm/dd
12
112
ISO
yymmdd
Los valores predeterminados, estilo 0 o 100, y 9 o 109, siempre devuelven el siglo (yyyy).
A continuación se muestra un ejemplo del uso del parámetro style de convert :
select convert(char(12), getdate(), 3)
Esto convierte la fecha actual al estilo ''3'', dd/mm/yy .
This document was created with Win2PDF available at http://www.win2pdf.com.
The unregistered version of Win2PDF is for evaluation or non-commercial use only.
This page will not be added after purchasing Win2PDF.
Descargar