martes, 23 de marzo de 2010

Oracle/PLSQL: Coalesce Function

Siempre se aprende algo nuevo, ahora me encontré con la función COALESCE en Oracle y debo reconocer que no la recordaba.

En Oracle se usa en Oracle 9i, Oracle 10g, Oracle 11g

La función coalesce retorna la primera expresión no nula en una lista. Si todos los valores son nulos, entonces la función retorna null

La sintaxis de la función es:

coalesce( expr1, expr2, ... expr_n )

Por ejemplo, se podría usar de la sgte. forma:

SELECT coalesce( address1, address2, address3 ) result
FROM suppliers;

El equivalente en la sentencia IF-THEN-ELSE es:

IF address1 is not null THEN
result := address1;

ELSIF address2 is not null THEN
result := address2;

ELSIF address3 is not null THEN
result := address3;

ELSE
result := null;

END IF;



Fuente: http://www.techonthenet.com/oracle/functions/coalesce.php

viernes, 5 de febrero de 2010

Ponte el cinturón

SQL Server: Limitando el numero de registros

En una consulta Oracle, cuando se quiere reducir el número de registros en una consulta se usa la sentencia:

rowcount <= 10

esto reduce el resultado a un número máximo de 10 registros.

En MySQL la solución similar sería con un

limit 10

en Sql Server encontré 2 soluciones:

1) Al principio del select

select top 10 ...

2) en un seteo previo a la consulta

set rowcount 10

para volver el seteo a la normalidad

viernes, 11 de diciembre de 2009

SQL Server: Tipos de datos enteros

Para identificar un campo entero de una tabla, en MS SQL Server existen estos 4 tipos de datos:

Tipo de datos Intervalo Almacenamiento

bigint

De -2^63 (-9.223.372.036.854.775.808) a 2^63-1 (9.223.372.036.854.775.807)

8 bytes

int

De -2^31 (-2.147.483.648) a 2^31-1 (2.147.483.647)

4 bytes

smallint

De -2^15 (-32.768) a 2^15-1 (32.767)

2 bytes

tinyint

De 0 a 255

1 byte


Fuente: http://technet.microsoft.com/es-es/library/ms187745.aspx

lunes, 30 de noviembre de 2009

SQL Server: ntext

Tipos de Datos

ntext

Datos Unicode de longitud variable con una longitud máxima de 2^30 - 1 (1.073.741.823) caracteres. El tamaño del almacenamiento, en bytes, es dos veces el número de caracteres especificado. El sinónimo de ISO para ntext es national text.

text

Datos no Unicode de longitud variable de la página de códigos del servidor y con una longitud máxima de 2^31-1 (2.147.483.647) caracteres. Cuando la página de códigos del servidor utiliza caracteres de doble byte, el almacenamiento sigue siendo de 2.147.483.647 bytes. Dependiendo de la cadena de caracteres, el espacio de almacenamiento puede ser inferior a 2.147.483.647 bytes.

Los tipos de datos ntext, text e image se quitarán en una versión futura de SQL Server.

Microsoft sugiere evitar su uso en nuevos trabajos de desarrollo.

http://msdn.microsoft.com/es-es/library/ms187993.aspx


Me encontré con unos de estos datos en una migración y no podía hacer comparaciones del tipo <> por no ser compatible con el tipo de dato ntext (en este caso el campo nm_observacion):


select rtrim(ltrim(nm_observacion))
,fc_recepcion
from db_SNP_RNASQL.dbo.cc_recepcion
where rtrim(ltrim(nm_observacion)) is not null
and rtrim(ltrim(nm_observacion)) <> ''

Tampoco podía calcular el largo de los datos para ver su tamaño y cambiar a un varchar con tranquilidad

No servía el len():

select max(len(nm_observacion))
from db_SNP_RNASQL.dbo.cc_recepcion

por lo que fue necesario ocupar la función DATALENGTH():

select max(DATALENGTH(nm_observacion))
from db_SNP_RNASQL.dbo.cc_recepcion

Fuente: http://www.mssqltips.com/tip.asp?tip=1188