Fecha y hora separadas
Me gustaría saber si hay alguna posibilidad de separar la fecha y la hora en el sql server 2005 y si es posible como se haría.
1 Respuesta
Respuesta de denciso
1
1
denciso, Soy una persona multifacética, tanto manejo la informática,...
Tienes que utilizar el convert:
CAST y CONVERT
Convierten explícitamente una expresión de un tipo de datos en otro. CAST y CONVERT proporcionan funciones similares.
Sintaxis
Uso de CAST:
CAST ( expression AS data_type )
Uso de CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Argumentos
Expression
¿Es cualquier expresión válida de Microsoft® SQL Server?. Para obtener más información, consulte Expresiones.
data_type
Es el tipo de datos de destino proporcionado por el sistema, incluido bigint y sql_variant. No se pueden utilizar tipos de datos definidos por el usuario. Para obtener más información acerca de los tipos de datos disponibles, consulte Tipos de datos.
length
Es un parámetro opcional de los tipos de datos nchar, nvarchar, char, varchar, binary o varbinary.
Style
Es el estilo del formato de fecha que se utiliza para convertir datos datetime o smalldatetime en datos de cadenas de caracteres (tipos de datos nchar, nvarchar, char, varchar, nchar o nvarchar), o el formato de cadena cuando se convierten datos float, real, money o smallmoney en datos de cadenas de caracteres (tipos de datos nchar, nvarchar, char, varchar, nchar o nvarchar).
SQL Server acepta el formato de fecha en estilo árabe, utilizando el algoritmo kuwaití.
En la siguiente tabla, las dos columnas de la izquierda representan los valores de style para la conversión de datetime o smalldatetime en cadenas de caracteres. Agregue 100 al valor de style para obtener el año con cuatro cifras, incluido el siglo (yyyy).
Sin el siglo
(Yy) Con el siglo
(Yyyy)
Estándar
Entrada/Salida**
- 0 o 100 (*) Valor predeterminado mon dd yyyy hh:miAM (o PM)
1 101 USA mm/dd/yy
2 102 ANSI yy.mm.dd
3 103 Británico/Francés dd/mm/yy
4 104 Alemán dd.mm.yy
5 105 Italiano dd-mm-yy
6 106 - dd mes aa
7 107 - Mes dd, aa
8 108 - hh:mm:ss
- 9 o 109 (*) Predeterminado + milisegundos mon dd yyyy hh:mi:ss:mmmAM (o PM)
10 110 USA mm-dd-yy
11 111 JAPÓN yy/mm/dd
12 112 ISO yymmdd
- 13 o 113 (*) Europeo predeterminado + milisegundos dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 o 120 (*) ODBC canónico yyyy-mm-dd hh:mi:ss(24h)
- 21 o 121 (*) ODBC canónico (con milisegundos) yyyy-mm-dd hh:mi:ss.mmm(24h)
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(sin espacios)
- 130* Kuwaití dd mon yyyy hh:mi:ss:mmmAM
- 131* Kuwaití dd/mm/yy hh:mi:ss:mmmAM
* Los valores predeterminados (style 0 o 100, 9 o 109, 13 o 113, 20 o 120, y 21 o 121) siempre devuelven el siglo (yyyy).
** Entrada cuando se convierte en datetime; salida cuando se convierte en cadenas de caracteres.
*** Diseñado para uso XML. Para la conversión de datos datetime o smalldatetime a character, el formato de salida es el que aparece descrito en la tabla. Para la conversión de datos float, money o smallmoney a character, la salida es equivalente a estilo 2. Para la conversión de datos real a character, la salda es equivalente a estilo 1.
Importante De forma predeterminada, SQL Server interpreta los años de dos cifras con el año 2049 como límite. Es decir, el año 49 se interpreta como 2049 y el año 50 se interpreta como 1950. Muchas aplicaciones de cliente, como las basadas en objetos de Automatización OLE, utilizan como límite el año 2030. SQL Server proporciona una opción de configuración (two digit year cutoff o reducción del año a dos dígitos) que cambia el año límite en SQL Server y permite el tratamiento coherente de las fechas. Sin embargo, el método más seguro es especificar los años con cuatro cifras.
Cuando se convierten cadenas de caracteres desde smalldatetime, los estilos que incluyen segundos o milisegundos muestran ceros en dichas posiciones. Puede recortar las partes de la fecha que no desee cuando convierta valores datetime o smalldatetime si utiliza la longitud apropiada en el tipo de datos char o varchar.
Esta tabla muestra los valores de style para la conversión de float o real en datos de cadenas de caracteres.
Valor Salida
0 (predeterminado) Seis cifras como máximo. Utiliza la notación científica cuando es apropiado.
1 Siempre ocho cifras. Utiliza siempre la notación científica.
2 Siempre 16 cifras. Utiliza siempre la notación científica.
En la siguiente tabla, la columna de la izquierda representa el valor de style para la conversión de money o smallmoney en datos de cadenas de caracteres.
Valor Salida
0 (predeterminado) Sin separadores de millar a la izquierda del separador decimal y dos cifras decimales; por ejemplo, 4235,98.
1 Separadores de millar a la izquierda del separador decimal y dos cifras decimales; por ejemplo, 3.510,92.
2 Sin separadores de millar a la izquierda del separador decimal y cuatro cifras decimales; por ejemplo, 4235,9819.
Tipos devueltos
Devuelve el mismo valor que si data type es 0.
Observaciones
Las conversiones implícitas son aquellas conversiones que ocurren sin especificar las funciones CAST o CONVERT. Las conversiones explícitas son aquellas conversiones que requieren que se especifique la función CAST (CONVERT). Este gráfico muestra todas las conversiones de tipos de datos explícitas e implícitas permitidas entre los tipos de datos del sistema de SQL Server, incluidos bigint y sql_variant.
Nota Como los datos Unicode siempre utilizan un número par de bytes, preste atención al convertir binary o varbinary en tipos de datos aceptados en Unicode, y viceversa. Por ejemplo, esta conversión no devuelve el valor hexadecimal 41, sino 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary)
No se acepta la conversión automática para los tipos de datos text e image. Puede convertir explícitamente datos de tipo text en cadenas de caracteres y datos de tipo image en datos de tipo binary o varbinary, pero la longitud máxima es 8000. Si intenta una conversión incorrecta (por ejemplo, si convierte en int una expresión de cadena de caracteres que incluya letras), SQL Server genera un mensaje de error.
Si la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra cadena, la salida dispone de la misma intercalación y etiqueta de intercalación que la entrada. Si la entrada no es una cadena de caracteres, la salida tiene la intercalación predeterminada de la base de datos y una etiqueta de intercalación coaccionable-predeterminada. Para obtener más información, consulte Precedencia de intercalación.
Para asignar otra intercalación a la salida, aplique la cláusula COLLATE a la expresión de resultado de las funciones CAST o CONVERT. Por ejemplo:
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
No existe una conversión implícita en la asignación del tipo de datos sql_variant, pero sí hay una conversión implícita a sql_variant.
Al convertir expresiones de caracteres o binarias (char, nchar, nvarchar, varchar, binary o varbinary) en una expresión de un tipo de datos diferente, los datos pueden quedar recortados, se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser presentado. Las conversiones en char, varchar, nchar, nvarchar, binary y varbinary se recortan, excepto en las conversiones que se muestran en esta tabla.
Del tipo de datos Al tipo de datos Resultado
int, smallint o tinyint char *
varchar *
nchar E
nvarchar E
money, smallmoney, numeric, decimal, float o real char E
varchar E
nchar E
nvarchar E
* Resultado demasiado corto para ser presentado.
E Error devuelto porque el resultado es demasiado corto para ser presentado.
Microsoft SQL Server garantiza que sólo las conversiones circulares, las conversiones que convierten un tipo de datos en otro y después vuelven a convertirlo en el tipo de datos original, devolverán los mismos valores en versiones diferentes. Este ejemplo muestra una conversión circular:
DECLARE @myval decimal (5, 2)
SET @myval = 193.57
SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5))
-- Or, using CONVERT
SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval))
No intente generar, por ejemplo, valores binary y convertirlos en un tipo de datos de la categoría de tipos de datos numéricos. SQL Server no garantiza que el resultado de una conversión de tipos de datos decimal o numeric a binary sea igual entre distintas versiones de SQL Server.
Este ejemplo muestra una expresión resultante demasiado corta para ser presentada.
USE pubs
SELECT SUBSTRING(title, 1, 25) AS Title, CAST(ytd_sales AS char(2))
FROM titles
WHERE type = 'trad_cook'
El siguiente es el conjunto de resultados:
Title
------------------------- --
Onions, Leeks, and Garlic *
Fifty Years in Buckingham *
Sushi, Anyone? *
(3 row(s) affected)
Cuando se convierten tipos de datos que tienen un número diferente de posiciones decimales, el valor queda recortado hasta la cifra de mayor precisión. Por ejemplo, el resultado de SELECT CAST(10,6496 AS int) es 10.
Cuando se realiza una conversión entre tipos de datos donde el tipo de datos destino tiene menos posiciones decimales que el tipo de datos origen, el valor se redondea. Por ejemplo, el resultado de CAST(10,3496847 AS money) es $10,3497.
SQL Server devuelve un mensaje de error cuando los datos no numéricos char, nchar, varchar o nvarchar se convierten a int, float, numeric o decimal. SQL Server también devuelve un error cuando se convierte una cadena vacía (" ") a numeric o decimal.
Usar datos de cadenas Binary
Cuando se convierten datos binary o varbinary en datos de cadena de caracteres y se especifica un número impar de valores a continuación de la por, SQL Server agrega un 0 (cero) después de la por para tener un número par de valores.
Los datos de tipo binary se componen de los caracteres del 0 al 9 y de la A a la F (o de la a a la f), en grupos de dos caracteres cada uno. Las cadenas de tipo binary tienen que estar precedidas por 0x. Por ejemplo, para representar FF, escriba 0xFF. El valor máximo es un valor de tipo binary de 8000 bytes, cada uno de los cuales es FF. Los tipos de datos binary no sólo se utilizan para guardar datos hexadecimales, sino también para almacenar patrones de bits. Puede que las conversiones y cálculos de números hexadecimales almacenados como datos de tipo binary no sean confiables.
Cuando se especifica la longitud de un tipo de datos binary, cada dos caracteres cuentan como uno. La longitud 10 significa que hay 10 grupos de dos caracteres.
Las cadenas de tipo binary vacías, representadas como 0x, se pueden almacenar como datos de tipo binary.
Ejemplos
A. Utilizar CAST y CONVERT
Los dos ejemplos devuelven los títulos de aquellos libros que tienen un 3 en la primera cifra de las ventas anuales y convierten ytd_sales en char(20).
-- Use CAST.
USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
FROM titles
WHERE CAST(ytd_sales AS char(20)) LIKE '3%'
GO
-- Use CONVERT.
USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
FROM titles
WHERE CONVERT(char(20), ytd_sales) LIKE '3%'
GO
Éste es el conjunto de resultados (de las consultas):
Title ytd_sales
------------------------------ -----------
Cooking with Computers: Surrep 3876
Computer Phobic AND Non-Phobic 375
Emotional Security: A New Algo 3336
Onions, Leeks, and Garlic: Coo 375
(4 row(s) affected)
B. Utilizar CAST con operadores aritméticos
Este ejemplo calcula una única columna (Copies) dividiendo las ventas anuales totales (ytd_sales) por el precio individual del libro (price). El resultado se convierte en el tipo de datos int después de redondearlo al número entero más próximo.
USE pubs
GO
SELECT CAST(ROUND(ytd_sales/price, 0) AS int) AS 'Copies'
FROM titles
GO
El siguiente es el conjunto de resultados:
Copies
------
205
324
6262
205
102
7440
NULL
383
205
NULL
17
187
16
204
418
18
1263
273
(18 row(s) affected)
C. Utilizar CAST para concatenar
Este ejemplo concatena expresiones que no son de texto ni tipo binary mediante la función de conversión de tipos de datos CAST.
USE pubs
GO
SELECT 'The price is ' + CAST(price AS varchar(12))
FROM titles
WHERE price > 10.00
GO
El siguiente es el conjunto de resultados:
------------------
The price is 19.99
The price is 11.95
The price is 19.99
The price is 19.99
The price is 22.95
The price is 20.00
The price is 21.59
The price is 10.95
The price is 19.99
The price is 20.95
The price is 11.95
The price is 14.99
(12 row(s) affected)
D. Utilizar CAST para obtener texto más legible
Este ejemplo utiliza CAST en la lista seleccionada para convertir la columna title en una columna de tipo char(50), para que los resultados sean más legibles.
USE pubs
GO
SELECT CAST(title AS char(50)), ytd_sales
FROM titles
WHERE type = 'trad_cook'
GO
El siguiente es el conjunto de resultados:
ytd_sales
-------------------------------------------------- ---------
Onions, Leeks, and Garlic: Cooking Secrets of the 375
Fifty Years in Buckingham Palace Kitchens 15096
¿Sushi, Anyone? 4095
(3 row(s) affected)
E. Utilizar CAST con una cláusula LIKE
Este ejemplo convierte una columna de tipo int (la columna ytd_sales) en una columna de tipo char(20) para poder utilizarla en una cláusula LIKE.
USE pubs
GO
SELECT title, ytd_sales
FROM titles
WHERE CAST(ytd_sales AS char(20)) LIKE '15%'
AND type = 'trad_cook'
GO
El siguiente es el conjunto de resultados:
title ytd_sales
------------------------------------------------------------ -----------
Fifty Years in Buckingham Palace Kitchens 15096
(1 row(s) affected)
Véase también
Conversión de tipos de datos
SELECT
Funciones de sistema
CAST y CONVERT
Convierten explícitamente una expresión de un tipo de datos en otro. CAST y CONVERT proporcionan funciones similares.
Sintaxis
Uso de CAST:
CAST ( expression AS data_type )
Uso de CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Argumentos
Expression
¿Es cualquier expresión válida de Microsoft® SQL Server?. Para obtener más información, consulte Expresiones.
data_type
Es el tipo de datos de destino proporcionado por el sistema, incluido bigint y sql_variant. No se pueden utilizar tipos de datos definidos por el usuario. Para obtener más información acerca de los tipos de datos disponibles, consulte Tipos de datos.
length
Es un parámetro opcional de los tipos de datos nchar, nvarchar, char, varchar, binary o varbinary.
Style
Es el estilo del formato de fecha que se utiliza para convertir datos datetime o smalldatetime en datos de cadenas de caracteres (tipos de datos nchar, nvarchar, char, varchar, nchar o nvarchar), o el formato de cadena cuando se convierten datos float, real, money o smallmoney en datos de cadenas de caracteres (tipos de datos nchar, nvarchar, char, varchar, nchar o nvarchar).
SQL Server acepta el formato de fecha en estilo árabe, utilizando el algoritmo kuwaití.
En la siguiente tabla, las dos columnas de la izquierda representan los valores de style para la conversión de datetime o smalldatetime en cadenas de caracteres. Agregue 100 al valor de style para obtener el año con cuatro cifras, incluido el siglo (yyyy).
Sin el siglo
(Yy) Con el siglo
(Yyyy)
Estándar
Entrada/Salida**
- 0 o 100 (*) Valor predeterminado mon dd yyyy hh:miAM (o PM)
1 101 USA mm/dd/yy
2 102 ANSI yy.mm.dd
3 103 Británico/Francés dd/mm/yy
4 104 Alemán dd.mm.yy
5 105 Italiano dd-mm-yy
6 106 - dd mes aa
7 107 - Mes dd, aa
8 108 - hh:mm:ss
- 9 o 109 (*) Predeterminado + milisegundos mon dd yyyy hh:mi:ss:mmmAM (o PM)
10 110 USA mm-dd-yy
11 111 JAPÓN yy/mm/dd
12 112 ISO yymmdd
- 13 o 113 (*) Europeo predeterminado + milisegundos dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 o 120 (*) ODBC canónico yyyy-mm-dd hh:mi:ss(24h)
- 21 o 121 (*) ODBC canónico (con milisegundos) yyyy-mm-dd hh:mi:ss.mmm(24h)
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(sin espacios)
- 130* Kuwaití dd mon yyyy hh:mi:ss:mmmAM
- 131* Kuwaití dd/mm/yy hh:mi:ss:mmmAM
* Los valores predeterminados (style 0 o 100, 9 o 109, 13 o 113, 20 o 120, y 21 o 121) siempre devuelven el siglo (yyyy).
** Entrada cuando se convierte en datetime; salida cuando se convierte en cadenas de caracteres.
*** Diseñado para uso XML. Para la conversión de datos datetime o smalldatetime a character, el formato de salida es el que aparece descrito en la tabla. Para la conversión de datos float, money o smallmoney a character, la salida es equivalente a estilo 2. Para la conversión de datos real a character, la salda es equivalente a estilo 1.
Importante De forma predeterminada, SQL Server interpreta los años de dos cifras con el año 2049 como límite. Es decir, el año 49 se interpreta como 2049 y el año 50 se interpreta como 1950. Muchas aplicaciones de cliente, como las basadas en objetos de Automatización OLE, utilizan como límite el año 2030. SQL Server proporciona una opción de configuración (two digit year cutoff o reducción del año a dos dígitos) que cambia el año límite en SQL Server y permite el tratamiento coherente de las fechas. Sin embargo, el método más seguro es especificar los años con cuatro cifras.
Cuando se convierten cadenas de caracteres desde smalldatetime, los estilos que incluyen segundos o milisegundos muestran ceros en dichas posiciones. Puede recortar las partes de la fecha que no desee cuando convierta valores datetime o smalldatetime si utiliza la longitud apropiada en el tipo de datos char o varchar.
Esta tabla muestra los valores de style para la conversión de float o real en datos de cadenas de caracteres.
Valor Salida
0 (predeterminado) Seis cifras como máximo. Utiliza la notación científica cuando es apropiado.
1 Siempre ocho cifras. Utiliza siempre la notación científica.
2 Siempre 16 cifras. Utiliza siempre la notación científica.
En la siguiente tabla, la columna de la izquierda representa el valor de style para la conversión de money o smallmoney en datos de cadenas de caracteres.
Valor Salida
0 (predeterminado) Sin separadores de millar a la izquierda del separador decimal y dos cifras decimales; por ejemplo, 4235,98.
1 Separadores de millar a la izquierda del separador decimal y dos cifras decimales; por ejemplo, 3.510,92.
2 Sin separadores de millar a la izquierda del separador decimal y cuatro cifras decimales; por ejemplo, 4235,9819.
Tipos devueltos
Devuelve el mismo valor que si data type es 0.
Observaciones
Las conversiones implícitas son aquellas conversiones que ocurren sin especificar las funciones CAST o CONVERT. Las conversiones explícitas son aquellas conversiones que requieren que se especifique la función CAST (CONVERT). Este gráfico muestra todas las conversiones de tipos de datos explícitas e implícitas permitidas entre los tipos de datos del sistema de SQL Server, incluidos bigint y sql_variant.
Nota Como los datos Unicode siempre utilizan un número par de bytes, preste atención al convertir binary o varbinary en tipos de datos aceptados en Unicode, y viceversa. Por ejemplo, esta conversión no devuelve el valor hexadecimal 41, sino 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary)
No se acepta la conversión automática para los tipos de datos text e image. Puede convertir explícitamente datos de tipo text en cadenas de caracteres y datos de tipo image en datos de tipo binary o varbinary, pero la longitud máxima es 8000. Si intenta una conversión incorrecta (por ejemplo, si convierte en int una expresión de cadena de caracteres que incluya letras), SQL Server genera un mensaje de error.
Si la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra cadena, la salida dispone de la misma intercalación y etiqueta de intercalación que la entrada. Si la entrada no es una cadena de caracteres, la salida tiene la intercalación predeterminada de la base de datos y una etiqueta de intercalación coaccionable-predeterminada. Para obtener más información, consulte Precedencia de intercalación.
Para asignar otra intercalación a la salida, aplique la cláusula COLLATE a la expresión de resultado de las funciones CAST o CONVERT. Por ejemplo:
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
No existe una conversión implícita en la asignación del tipo de datos sql_variant, pero sí hay una conversión implícita a sql_variant.
Al convertir expresiones de caracteres o binarias (char, nchar, nvarchar, varchar, binary o varbinary) en una expresión de un tipo de datos diferente, los datos pueden quedar recortados, se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser presentado. Las conversiones en char, varchar, nchar, nvarchar, binary y varbinary se recortan, excepto en las conversiones que se muestran en esta tabla.
Del tipo de datos Al tipo de datos Resultado
int, smallint o tinyint char *
varchar *
nchar E
nvarchar E
money, smallmoney, numeric, decimal, float o real char E
varchar E
nchar E
nvarchar E
* Resultado demasiado corto para ser presentado.
E Error devuelto porque el resultado es demasiado corto para ser presentado.
Microsoft SQL Server garantiza que sólo las conversiones circulares, las conversiones que convierten un tipo de datos en otro y después vuelven a convertirlo en el tipo de datos original, devolverán los mismos valores en versiones diferentes. Este ejemplo muestra una conversión circular:
DECLARE @myval decimal (5, 2)
SET @myval = 193.57
SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5))
-- Or, using CONVERT
SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval))
No intente generar, por ejemplo, valores binary y convertirlos en un tipo de datos de la categoría de tipos de datos numéricos. SQL Server no garantiza que el resultado de una conversión de tipos de datos decimal o numeric a binary sea igual entre distintas versiones de SQL Server.
Este ejemplo muestra una expresión resultante demasiado corta para ser presentada.
USE pubs
SELECT SUBSTRING(title, 1, 25) AS Title, CAST(ytd_sales AS char(2))
FROM titles
WHERE type = 'trad_cook'
El siguiente es el conjunto de resultados:
Title
------------------------- --
Onions, Leeks, and Garlic *
Fifty Years in Buckingham *
Sushi, Anyone? *
(3 row(s) affected)
Cuando se convierten tipos de datos que tienen un número diferente de posiciones decimales, el valor queda recortado hasta la cifra de mayor precisión. Por ejemplo, el resultado de SELECT CAST(10,6496 AS int) es 10.
Cuando se realiza una conversión entre tipos de datos donde el tipo de datos destino tiene menos posiciones decimales que el tipo de datos origen, el valor se redondea. Por ejemplo, el resultado de CAST(10,3496847 AS money) es $10,3497.
SQL Server devuelve un mensaje de error cuando los datos no numéricos char, nchar, varchar o nvarchar se convierten a int, float, numeric o decimal. SQL Server también devuelve un error cuando se convierte una cadena vacía (" ") a numeric o decimal.
Usar datos de cadenas Binary
Cuando se convierten datos binary o varbinary en datos de cadena de caracteres y se especifica un número impar de valores a continuación de la por, SQL Server agrega un 0 (cero) después de la por para tener un número par de valores.
Los datos de tipo binary se componen de los caracteres del 0 al 9 y de la A a la F (o de la a a la f), en grupos de dos caracteres cada uno. Las cadenas de tipo binary tienen que estar precedidas por 0x. Por ejemplo, para representar FF, escriba 0xFF. El valor máximo es un valor de tipo binary de 8000 bytes, cada uno de los cuales es FF. Los tipos de datos binary no sólo se utilizan para guardar datos hexadecimales, sino también para almacenar patrones de bits. Puede que las conversiones y cálculos de números hexadecimales almacenados como datos de tipo binary no sean confiables.
Cuando se especifica la longitud de un tipo de datos binary, cada dos caracteres cuentan como uno. La longitud 10 significa que hay 10 grupos de dos caracteres.
Las cadenas de tipo binary vacías, representadas como 0x, se pueden almacenar como datos de tipo binary.
Ejemplos
A. Utilizar CAST y CONVERT
Los dos ejemplos devuelven los títulos de aquellos libros que tienen un 3 en la primera cifra de las ventas anuales y convierten ytd_sales en char(20).
-- Use CAST.
USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
FROM titles
WHERE CAST(ytd_sales AS char(20)) LIKE '3%'
GO
-- Use CONVERT.
USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
FROM titles
WHERE CONVERT(char(20), ytd_sales) LIKE '3%'
GO
Éste es el conjunto de resultados (de las consultas):
Title ytd_sales
------------------------------ -----------
Cooking with Computers: Surrep 3876
Computer Phobic AND Non-Phobic 375
Emotional Security: A New Algo 3336
Onions, Leeks, and Garlic: Coo 375
(4 row(s) affected)
B. Utilizar CAST con operadores aritméticos
Este ejemplo calcula una única columna (Copies) dividiendo las ventas anuales totales (ytd_sales) por el precio individual del libro (price). El resultado se convierte en el tipo de datos int después de redondearlo al número entero más próximo.
USE pubs
GO
SELECT CAST(ROUND(ytd_sales/price, 0) AS int) AS 'Copies'
FROM titles
GO
El siguiente es el conjunto de resultados:
Copies
------
205
324
6262
205
102
7440
NULL
383
205
NULL
17
187
16
204
418
18
1263
273
(18 row(s) affected)
C. Utilizar CAST para concatenar
Este ejemplo concatena expresiones que no son de texto ni tipo binary mediante la función de conversión de tipos de datos CAST.
USE pubs
GO
SELECT 'The price is ' + CAST(price AS varchar(12))
FROM titles
WHERE price > 10.00
GO
El siguiente es el conjunto de resultados:
------------------
The price is 19.99
The price is 11.95
The price is 19.99
The price is 19.99
The price is 22.95
The price is 20.00
The price is 21.59
The price is 10.95
The price is 19.99
The price is 20.95
The price is 11.95
The price is 14.99
(12 row(s) affected)
D. Utilizar CAST para obtener texto más legible
Este ejemplo utiliza CAST en la lista seleccionada para convertir la columna title en una columna de tipo char(50), para que los resultados sean más legibles.
USE pubs
GO
SELECT CAST(title AS char(50)), ytd_sales
FROM titles
WHERE type = 'trad_cook'
GO
El siguiente es el conjunto de resultados:
ytd_sales
-------------------------------------------------- ---------
Onions, Leeks, and Garlic: Cooking Secrets of the 375
Fifty Years in Buckingham Palace Kitchens 15096
¿Sushi, Anyone? 4095
(3 row(s) affected)
E. Utilizar CAST con una cláusula LIKE
Este ejemplo convierte una columna de tipo int (la columna ytd_sales) en una columna de tipo char(20) para poder utilizarla en una cláusula LIKE.
USE pubs
GO
SELECT title, ytd_sales
FROM titles
WHERE CAST(ytd_sales AS char(20)) LIKE '15%'
AND type = 'trad_cook'
GO
El siguiente es el conjunto de resultados:
title ytd_sales
------------------------------------------------------------ -----------
Fifty Years in Buckingham Palace Kitchens 15096
(1 row(s) affected)
Véase también
Conversión de tipos de datos
SELECT
Funciones de sistema
- Compartir respuesta
- Anónimo
ahora mismo