Está en la página 1de 19

Funciones (Transact-SQL)

SQL Server 2008 R2 Otras versiones

SQL Server 2008 SQL Server 2005

[Este tema pertenece a la documentacin de la versin preliminar y est sujeto a cambios en versiones futuras. Los temas en blanco se incluyen como marcadores de posicin. NOTA: Con el fin de proporcionarle contenido adicional en distintos idiomas, Microsoft ofrece documentacin localizada mediante mtodos de traduccin alternativos. Para esta versin preliminar, parte del contenido de esta documentacin se ha traducido mediante el uso de estos mtodos. Microsoft es consciente de que los documentos traducidos de esta forma no son siempre perfectos, por lo que es posible que este artculo contenga errores de vocabulario, sintaxis o gramtica. La versin final de este contenido se traducir por los mtodos tradicionales y la calidad ser igual que la de las versiones anteriores.] SQL Server proporciona numerosas funciones integradas y permite crear funciones definidas por el usuario. En esta pgina se muestra una lista de las categoras integradas. Para obtener ms informacin acerca de las funciones definidas por el usuario, vea Funciones definidas por el usuario (motor de base de datos). Tipos de funciones Funcin Descripcin Funciones de conjuntos de Devuelven un objeto que se puede utilizar como las filas referencias a tablas en una instruccin SQL. Operan sobre una coleccin de valores y devuelven un solo Funciones de agregado valor de resumen. Devuelven un valor de categora para cada fila de una Funciones de categora particin. Operan sobre un valor y despus devuelven otro valor. Las Funciones escalares (se funciones escalares se pueden utilizar donde la expresin describen a continuacin) sea vlida. Funciones escalares Categora de la funcin Funciones de configuracin Descripcin Devuelven informacin acerca de la configuracin actual.

Funciones del cursor Devuelven informacin acerca de los cursores. Llevan a cabo operaciones sobre un valor de entrada de fecha y hora, y devuelven un valor numrico, de cadena o de fecha y hora. Funciones Realizan clculos basados en valores de entrada proporcionados matemticas como parmetros a las funciones y devuelven valores numricos. Funciones de Devuelven informacin acerca de la base de datos y los objetos metadatos de la base de datos. Funciones de Devuelven informacin acerca de usuarios y funciones. seguridad Realizan operaciones en el valor de entrada de una cadena (char Funciones de cadena o varchar) y devuelven una cadena o un valor numrico. Realizan operaciones y devuelven informacin acerca de Funciones del sistema valores, objetos y configuraciones de una instancia de SQL Server. Funciones estadsticas Devuelven informacin estadstica acerca del sistema. del sistema Funciones de texto e Realizan operaciones sobre los valores de entrada o columnas de imagen texto o imagen, y devuelven informacin acerca del valor. Determinismo de funcin

Las funciones integradas de SQL Server son deterministas o no deterministas. Las funciones son deterministas cuando devuelven siempre el mismo resultado cada vez que se llaman con un conjunto especfico de valores de entrada. Las funciones son no deterministas cuando es posible que devuelvan distintos resultados cada vez que se llaman con un mismo conjunto especfico de valores de entrada. Para obtener ms informacin, vea Funciones deterministas y no deterministas Intercalacin de funciones

Las funciones que toman una entrada de cadena de caracteres y devuelven una salida de cadena de caracteres utilizan la intercalacin de la cadena de entrada para la salida. Las funciones que toman entradas que no son de caracteres y devuelven una cadena de caracteres utilizan la intercalacin predeterminada de la base de datos actual para la salida. Las funciones que toman varias entradas de cadena de caracteres y devuelven una cadena de caracteres utilizan las reglas de prioridad de intercalacin para establecer la intercalacin de la cadena de salida. Para obtener ms informacin, vea Prioridad de intercalacin (Transact-SQL). Que es SQL? Funciones Bsicas SQL es un lenguaje universal dedicado a las bases de datos. Es un lenguaje de sintaxis simple y muy potente. Mediante l se puede recorrer, modificar o borrar registros de las

tablas de datos. A continuacin escribi una gua bsica para aprender SQL. Las funciones principales y el modo de utilizacin. Vemoslo ahora: Nota: El asterisco (*) es un comodin, que selecciona todas las columnas dentro de los lmites que pongamos. Propiedad SELECT: Hace la seleccin en una tabla de la BD. SELECT * FROM datos 'Esta sentencia seleccionaria todos, absolutamente todos los registros dentro de la tabla datos. SELECT * FROM datos WHERE usuario='juan' 'Seleccionariamos todos los registros dentro de la tabla datos que tengan como usuario a "Juan". Propiedad INSERT INTO: Agrega un nuevo registro a la tabla elegida INSERT INTO datos (usuario) VALUES ('corsa') 'Insertamos en la tabla datos en la columna usuario, un registro nuevo. INSERT INTO datos (usuario, edad) VALUES ('corsa',20) 'Aqui insertamos 2 registros al mismo tiempo. Propiedad DELETE: Borra registros de nuestra tabla DELETE FROM datos WHERE usuario = 'pedrito' 'Borramos los regitros donde el usuario sea "pedrito". DELETE FROM datos WHERE usuario = 'Mario' AND edad = 16 'Borramos solo los usuario de nombre Mario que tenian 16 aos. Propiedad UPDATE: Actuailiza registros, modificando datos ya existentes. UPDATE datos SET usuario = 'pedrito' 'Esta modificacin renombrar todos los usuaarios a "pedrito". UPDATE datos SET usuario = 'Mario' WHERE edad = 16 'Modificamos solo los registros que tenian 16 aos. Ahora todos los usuario de 16 aos se llaman "Mario". Modo de usar SQL en nuestras bases de datos: Podemos guardar la sentencia SQL en una variable y llamarla para usarla: <% Dim sql, oConn, RS sql = "SELECT * FROM datos" 'Conectamos a la BD.

Set oConn = Server.CreateObject("ADODB.Connection") Set RS = Server.CreateObject("ADODB.RecordSet") oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=D:\Webs\Soloasp\db\mibd.mdb" 'ahora abrimos nuetro RecordSet con los parmetros del sql que pusimos antes. RS.Open sql, oConn, 1 ... 'Este DO WHILE imprimira todos los registros en la columna nombre. Do While not RS.EOF Response.Write RS.Fields("Nombre") RS.MoveNext Loop ... 'Cerramos y limpiamos todo. RS.Close oConn.Close Set RS = Nothing Set oConn = Nothing %>

Captulo 33. Extendiendo SQL: Funciones


Tabla de contenidos Funciones de Lenguaje de Consultas (SQL) Funciones de Lenguaje Procedural Funciones Internas Funciones de Lenguaje Compilado (C) Sobrecarga de funciones

Parte de definir un tipo nuevo es la definicin de funciones que describen su comportamiento. Como consecuencia, mientras que es posible definir una nueva funcin sin definir un tipo nuevo, lo contrario no es cierto. Por ello describimos como aadir nuevas funciones para Postgres antes de describir cmo aadir nuevos tipos. Postgres SQL proporciona tres tipos de funciones:

funciones de lenguaje de consultas (funciones escritas en SQL) funciones de lenguaje procedural (funciones escritas en, por ejemplo, PLTCL o PLSQL)

funciones de lenguaje de programacin (funciones escritas en un lenguaje de programacin compilado tales como C)

Cada clase de funcin puede tomar un tipo base, un tipo compuesto o alguna combinacin como argumentos (parmetros). Adems, cada clase de funcn puede devolver un tipo base o un tipo compuesto. Es ms fcil definir funciones SQL, as que empezaremos con ellas. Los ejemplos en esta seccin se puede encontrar tambin en funcs.sql y funcs.c.

Funciones de Lenguaje de Consultas (SQL)


Las funciones SQL ejecutan una lista arbitraria de consultas SQL, devolviendo los resultados de la ltima consulta de la lista. Las funciones SQL en general devuelven conjuntos. Si su tipo de retorno no se especifica como un setof, entonces un elemento arbitrario del resultado de la ltima consulta ser devuelto. El cuerpo de una funcin SQL que sigue a AS debera ser una lista de consultas separadas por caracteres espacio en blanco y entre parntesis dentro de comillas simples. Notar que las comillas simples usadas en las consultas se deben escribir como smbolos de escape, precedindolas con dos barras invertidas. Los argumentos de la funcin SQL se pueden referenciar en las consultas usando una sintaxis $n: $1 se refiere al primer argumento, $2 al segundo, y as sucesivamente. Si un argumento es complejo, entonces una notacin dot (por ejemplo "$1.emp") se puede usar para acceder a las propiedades o atributos del argumento o para llamar a funciones.

Ejemplos
Para ilustrar una funcin SQL sencilla, considere lo siguiente, que se podra usar para cargar en una cuenta bancaria:
create function TP1 (int4, float8) returns int4 as 'update BANK set balance = BANK.balance - $2 where BANK.acctountno = $1 select(x = 1)' language 'sql';

Un usuario podra ejecutar esta funcin para cargar $100.00 en la cuenta 17 de la siguiente forma:
select (x = TP1( 17,100.0));

El ms interesante ejemplo siguiente toma una argumento sencillo de tipo EMP, y devuelve resultados mltiples:
select function hobbies (EMP) returns set of HOBBIES as 'select (HOBBIES.all) from HOBBIES where $1.name = HOBBIES.person' language 'sql';

Funciones SQL sobre Tipos Base


La funcin SQL ms simple posible no tiene argumentos y sencillamente devuelve un tipo base, tal como int4:
CREATE FUNCTION one() RETURNS int4 AS 'SELECT 1 as RESULT' LANGUAGE 'sql'; SELECT one() AS answer; +-------+ |answer | +-------+ |1 | +-------+

Notar que definimos una lista objetivo para la funcin (con el nombre RESULT), pero la lista objetivo de la consulta que llam a la funcin sobreescribi la lista objetivo de la funcin. Por esto, el resultado se etiqueta answer en vez de one. Es casi tan fcil definir funciones SQL que tomen tipos base como argumentos. En el ejemplo de abajo, note cmo nos referimos a los argumentos dentro de la funcin como $1 y $2:
CREATE FUNCTION add_em(int4, int4) RETURNS int4 AS 'SELECT $1 + $2;' LANGUAGE 'sql'; SELECT add_em(1, 2) AS answer; +-------+ |answer | +-------+ |3 | +-------+

Funciones SQL sobre Tipos Compuestos


Al especificar funciones con argumentos de tipos compuestos (tales como EMP), debemos no solo especificar qu argumento queremos (como hicimos ms arriba con $1 y $2) sino tambin los atributos de ese argumento. Por ejemplo, observe la funcin double_salary que procesa cual sera su salario si se doblase:
CREATE FUNCTION double_salary(EMP) RETURNS int4 AS 'SELECT $1.salary * 2 AS salary;' LANGUAGE 'sql'; SELECT name, double_salary(EMP) AS dream FROM EMP WHERE EMP.cubicle ~= '(2,1)'::point; +-----+-------+ |name | dream |

+-----+-------+ |Sam | 2400 | +-----+-------+

Note el uso de la sintaxis $1.salary. Antes de adentrarnos en el tema de las funciones que devuelven tipos compuestos, debemos presentar primero la notacin de la funcin para proyectar atributos. La forma sencilla de explicar esto es que podemos normalmente usar la notacin atributo(clase) y clase.atributo indistintamente:
--- esto es lo mismo que: -- SELECT EMP.name AS youngster FROM EMP WHERE EMP.age < 30 -SELECT name(EMP) AS youngster FROM EMP WHERE age(EMP) < 30; +----------+ |youngster | +----------+ |Sam | +----------+

Como veremos, sin embargo, no siempre es este el caso. Esta notacin de funcin es importante cuando queremos usar una funcin que devuelva una nica instancia. Hacemos esto embebiendo la instancia completa dentro de la funcin, atributo por atributo. Esto es un ejemplo de una funcin que devuelve una nica instancia EMP:
CREATE FUNCTION new_emp() RETURNS EMP AS 'SELECT \'None\'::text AS name, 1000 AS salary, 25 AS age, \'(2,2)\'::point AS cubicle' LANGUAGE 'sql';

En este caso hemos especificado cada uno de los atributos con un valor constante, pero cualquier computacin o expresin se podra haber sustituido por estas constantes. Definir una funcin como esta puede ser delicado. Algunos de las deficiencias ms importantes son los siguientes:

La orden de la lista objetivo debe ser exactamente la misma que aquella en la que los atributos aparezcan en la orden CREATE TABLE (o cuando ejecute una consulta .*). Se debe encasillar las expresiones (usando ::) muy cuidadosamente o ver el siguiente error:
WARN::function declared to return type EMP does not retrieve (EMP.*)

Al llamar a una funcin que devuelva una instancia, no podemos obtener la instancia completa. Debemos o bien proyectar un atributo fuera de la instancia o bien pasar la instancia completa a otra funcin.
SELECT name(new_emp()) AS nobody; +-------+ |nobody | +-------+ |None | +-------+

La razn por la que, en general, debemos usar la sintaxis de funcin para proyectar los atributos de los valores de retorno de la funcin es que el parser no comprende la otra sintaxis (dot) para la proyeccin cuando se combina con llamadas a funciones.
SELECT new_emp().name AS nobody; WARN:parser: syntax error at or near "."

Cualquier coleccin de ordenes en el lenguaje de consulta SQL se pueden empaquetar juntas y se pueden definir como una funcin. Las ordenes pueden incluir updates (es decir, consultas INSERT, UPDATE, y DELETE) as como SELECT. Sin embargo, la orden final debe ser un SELECT que devuelva lo que se especifique como el tipo de retorno de la funcin.
CREATE FUNCTION clean_EMP () RETURNS int4 AS 'DELETE FROM EMP WHERE EMP.salary <= 0; SELECT 1 AS ignore_this' LANGUAGE 'sql'; SELECT clean_EMP(); +--+ |x | +--+ |1 | +--+

Richard Silva Re: FUNCION CONVERT-SQL Cul es el formato del campo string [sql_date]? Dependiendo de eso puedes elaborar la consulta si hacer la conversin.

Mensajes: n/a

Podras usar la funcin Date( ). Copio y pego de la ayuda de VFP9:

" Date( ) FunctionDATE([nYear, nMonth, nDay])

Parameters nYear Specifies the year returned in the year 2000-compliant Date value. nYear can be a value from 100 to 9999. nMonth Specifies the month returned in the year 2000-compliant Date value. nMonth can be a value from 1 to 12. nDay Specifies the day returned in the year 2000-compliant Date value. nDay can be a value from 1 to 31. " La funcin CTOD( ) tambin te permite hacer la conversin, sin embargo puede retornar valores de fecha ambiguos. En resumen, para usar la funcin Date( ), debers extraer el Ao, el Mes y el Da de la Fecha. Luego, la consulta quedara algo como: ' lnYear es el Ao convertido a entero ' lnMes es el Mes convertido a entero ' lnDia es el Da convertido a entero SQL="Select * from TABLA where Date( lnYear, lnMes, lnDia ) between " & fecha1 & " and " & fecha2

Espero te sea til -Saludos, Richard. "pepe" <p_e_p_e_aa***yahoo.com.ar> escribi en el mensaje news:eac9c04d-9d8f-417b-8d9f-2bad5f0f56d2***u14g2000yqg.googlegroups.com... Gente del foro de Foxpro; necesitara saber si existe una funcion CONVERT para convertir un campo de una tabla de un tipo string a uno date. Me explico; tengo un campo de tipo texto que contiene una fecha, por lo que para filtrar por ese campo, tengo que convertirlo a DATE (En otros motores existe para esto la funcion CONVERT, SQL_CONVERT, cDate, CCDATE, etc; pero en el motor de SQL de foxpro no

conozco cul es la funcin y en que formato de fecha devuelve tal conversin) Ejemplo de lo que necesito... SQL="Select * from TABLA where convert(campoTexto, sql_date) between " & fecha1 & " and " & fecha2 Quiero saber que formato de fecha devuelve el convert (si existe tal funcion en visualFoxPro) si yyyy-mm-dd, o dd-mm-yyyy, o mm-dd-yyyy... Desde ya agradezco su valiosa ayuda.Saludos pp

Ejemplo de la funcin Max de Sql


<Volver> - Anterior - Siguiente

simple ejemplo de la funcin Max de Sql para obtener de una tabla el valor mximo para una columna.
El siguiente cdigo utiliza Ado para conectarse a una base de datos Access, y mediante una simple funcin , obtiene el valor mximo para un campo, en este caso llamado Id ( no es autonumrico) y le suma uno para luego aadir mediante la instruccin INSERT INTO de sql , el valor

Controles :

Aadir la referencia a Ado desde el men de referencias de vb Un Commandbutton para aadir un registro nuevo El campo , en este caso llamado Id debe ser numrico

Cdigo fuente en el formulario

Nota: indicar el nombre de la base de datos en la cadena de conexin


Texto planoImprimir 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. Option Explicit ' Objeto connection de ADO Dim cn As ADODB.Connection ' variable para la cadena de conexin Private ConnectionString As String Private Sub Command1_Click() ' Abrir una nueva conexin con la bse de datos ACCESS Call Abrir_Conexion(ConnectionString) ' Obtener el valor mximo + 1 Dim lMax As Long lMax = Maximo_Valor("Tabla", "Id", cn) 'Nuevo recordset para aadir mediante Inser Into el nuevo valor Dim rs As ADODB.Recordset ' Ejecutar el sql con mtodo Execute del objeto Connection Set rs = cn.Execute("INSERT INTO Tabla (id) VALUES (" & lMax & ")") ' mostrar el valor MsgBox "Nuevo valor agregado : " & lMax, vbInformation ' cerrar la conexin abierta Call Cerrar_Conexion(cn) End Sub ' Abrir una nueva conexin Sub Abrir_Conexion(cs As String) ' si el connection NO est creado .. If cn Is Nothing Then ' Crearlo Set cn = New ADODB.Connection End If ' si est cerrado If cn.State = adStateClosed Then ' abrirlo cn.Open cs End If End Sub Sub Cerrar_Conexion(cn As ADODB.Connection) If Not cn Is Nothing Then

48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99.

If cn.State = adStateOpen Then cn.Close Set cn = Nothing End If End Sub

' funcin de tipo Long que retorna _ el valor maximo para el campo indicado + 1 ''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function Maximo_Valor( _ Tabla As String, _ Campo As String, _ Conexion As ADODB.Connection) As Long Dim rs As ADODB.Recordset Dim sql As String ' Comando Sql para usar la funcin Max y retornar en n_Maximo el valor sql = "SELECT MAX([" & Campo & "]) As n_Maximo FROM " & "[" & Tabla & "]" ' Ejecutar el comando Set rs = cn.Execute(sql) ' comprobar si el valor no es un valor Nulo If IsNull(rs!n_Maximo) Then ' si es nulo retornamos 0 Maximo_Valor = 0 Else ' retornar el MAX + 1 Maximo_Valor = rs!n_Maximo + 1 End If ' libear el recordset If rs.State = adStateOpen Then rs.Close Set rs = Nothing End Function

Private Sub Form_Load() ' cadena de conexin OLEDB ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & App.Path & "\" & "base_de_datos.MDB;" & _ "Persist Security Info=False"

Command1.Caption = "Aadir registro" End Sub Private Sub Form_Unload(Cancel As Integer) ' finalizar la conexin al descargar el formulario

100. 101.

Cerrar_Conexion cn End Sub

Cuenta(expr)
El marcador de posicinexpr representa una expresin de cadena que identifica el campo que contiene los datos que desea contar o una expresin que realiza un clculo utilizando los datos de ese campo. Los operandos deexpr pueden incluir el nombre de un campo de tabla o una funcin (que puede ser intrnseca o definida por el usuario, pero no puede ser ninguna de las otras funciones de agregado de SQL). Puede contar cualquier clase de datos, incluido texto.
(3)

FUNCIONES FIRST Y LAST

Devuelven un valor de campo del primer o del ltimo registro en el conjunto de resultados devueltos por una consulta.

Sintaxis First(expr) Last(expr)


El marcador de posicinexpr representa una expresin de cadena que identifica el campo que contiene los datos que desea utilizar o una expresin que realiza un clculo utilizando los datos de ese campo. Los operandos deexpr pueden incluir el nombre de un campo de tabla, una constante o una funcin (que puede ser intrnseca o definida por el usuario, pero no puede ser ninguna de las otras funciones de agregado de SQL).
(3)

FUNCIONES MN Y MX (MIN, MAX)

Devuelven el mnimo o el mximo de un conjunto de valores de un campo especificado en una consulta.

Sintaxis Mn(expr) Mx(expr)


El marcador de posicinexpr representa una expresin de cadena que identifica el campo que contiene los datos que desea evaluar o una expresin que realiza un clculo utilizando los datos de ese campo. Los operandos deexpr pueden incluir el nombre de un campo de tabla,

una constante o una funcin (que puede ser intrnseca o definida por el usuario, pero no puede ser ninguna de las otras funciones de agregado de SQL).
(3)

FUNCIONES DESVEST (STDEV) Y DESVESTP (STDEVP)

Devuelven clculos de la desviacin estndar de una poblacin y una muestra de poblacin para un conjunto de valores de un campo especificado en una consulta.

Sintaxis StDev(expr) StDevP(expr)


El marcador de posicinexpr representa una expresin de cadena que identifica el campo que contiene los datos numricos que desea evaluar o una expresin que realiza un clculo utilizando los datos de ese campo. Los operandos deexpr pueden incluir el nombre de un campo de tabla, una constante o una funcin (que puede ser intrnseca o definida por el usuario, pero no puede ser ninguna de las otras funciones de agregado de SQL).
(3)

SUM (FUNCIN)

Devuelve la suma de un conjunto de valores de un campo especfico de una consulta.

Sintaxis Sum(expr)
El marcador de posicinexpr representa una expresin de cadena que identifica el campo que contiene los datos numricos que desea sumar o una expresin que realiza un clculo utilizando los datos de ese campo. Los operandos deexpr pueden incluir el nombre de un campo de tabla, una constante o una funcin (que puede ser intrnseca o definida por el usuario, pero no puede ser ninguna de las otras funciones de agregado de SQL). 9Funciones Var y VarP Devuelven clculos de lavarianza de una poblacin o una muestra de poblacin representada como un conjunto de valores de un campo especificado en una consulta.

Sintaxis Var(expr) VarP(expr)


El marcador de posicinexpr representa una expresin de cadena que identifica el campo que contiene los datos numricos que desea evaluar o una expresin que realiza un clculo

utilizando los datos de ese campo. Los operandos deexpr pueden incluir el nombre de un campo de tabla, una constante o una funcin (que puede ser intrnseca o definida por el usuario, pero no puede ser ninguna de las otras funciones de agregado de SQL).
(3)

GROUP BY

Combina los registros con valores idnticos, en la lista de campos especificados, en un nico registro. Para cada registro se crea un valor sumario si se incluye una funcin SQL agregada, como por ejemplo Sum o Count, en la instruccin SELECT. Su sintaxis es: SELECTcampos FROM tabla WHERE criterio GROUP BY campos del grupo GROUP BY es opcional. Los valores de resumen se omiten si no existe una funcin SQL agregada en la instruccin SELECT. Los valores Null en los campos GROUP BY se agrupan y no se omiten. No obstante, los valores Null no se evalan en ninguna de las funciones SQL agregadas. Se utiliza la clusula WHERE para excluir aquellas filas que no desea agrupar, y la clusula HAVING para filtrar los registros una vez agrupados. A menos que contenga un dato Memo u Objeto OLE , un campo de la lista de campos GROUP BY puede referirse a cualquier campo de las tablas que aparecen en la clusula FROM, incluso si el campo no esta incluido en la instruccin SELECT, siempre y cuando la instruccin SELECT incluya al menos una funcin SQL agregada. Todos los campos de la lista de campos de SELECT deben o bien incluirse en la clusula GROUP BY o como argumentos de una funcin SQL agregada. Una vez que GROUP BY ha combinado los registros, HAVING muestra cualquier registro agrupado por la clusula GROUP BY que satisfaga las condiciones de la clusula HAVING. HAVING es similar a WHERE, determina qu registros se seleccionan. Una vez que los registros se han agrupado utilizando GROUP BY, HAVING determina cuales de ellos se van a mostrar.

La funcin isnull en Sql La funcin isnull es una de las que ms suelo utilizar a menudo. Para que sirve? Para reemplazar los valores nulos por uno que nosotros digamos. Por ejemplo, vamos a imaginar que tenemos una tabla que se llama facturas y un campo que se llama valor. Y queremos una sencilla consulta que nos diga la suma de estas facturas. Aqu haramos algo as: select sum(valor) from facturas Pero claro y que ocurre si ese campo valor tiene nulos? Pues que tendremos problemas... pero para evitarlos tenemos el isnull. Lo que vamos a hacer es decirle que si el campo valor es nulo, lo reemplazaremos por un cero como? as de facil isnull(valor,0) Es decir, le ponemos el nombre del campo y el valor por el que se van a reemplazar los nulos. Con esto, nuestra consulta quedara: select sum(isnull(valor,0)) from facturas Lo bueno del isnull es que se puede emplear casi en cualquier sitio, como por ejemplo en la parte where de la consulta. Por ejemplo, ahora vamos a sacar las facturas que no tengan valor o sea cero: select * where isnull(valor,0)=0 As de sencillo. Con isnull podrs evitar el problemtico uso de los nulos que tantos dolores de cabeza suelen producir.

FUNCION isnull
Introduccin
La funcin IsNull() permite determinar si el valor de un atributo es NULL del DBMS.

Alcance
Objetos: Todos los objetos Lenguajes: C/SQL - Java - Visual Basic Visual FoxPro C# DBMS: SQL Server, Oracle, Informix, DB2 Interfaces: Win/Web

Descripcin
En algunos casos es necesario determinar si el valor de un atributo se corresponde con el NULL del DBMS. Este valor es diferente al nullvalue (obtenido por ej.utilizando la funcin Nullvalue(<Atributo>), que GeneXus determina segn el tipo de dato/DBMS.

El valor NULL en un atributo pudo haberse generado por ej.por no haber instanciado el atributo en un New (teniendo la preference Initialize not referrenced attributes con el valor No). Tambien puede ser necesario distingirlo de otros valores cuando se acceden a tablas externas.

Cuando la funcin se utiliza incluyndola en un Where o Condition que se optimice (esto significa que la condicin se resuelve en el servidor). en la sentencia SQL se traducir como ...Atributo IS NULL.

Sintaxis:

IsNull(<Atributo>)

Retorno:

Valor booleano

Ejemplo
For each Where IsNull(CliNom) .

. Endfor

Este For each navegara los registros de Clientes que tuvieran el atributo CliNom con el valor NULL del DBMS.

Otro ejemplo:

For each If IsNull(CliNom) . endif . . Endfor

Este ejemplo sera similar al For each anterior, y debera navegar los mismos registros, la diferencia sera que en el primer caso la condicin se resolvera en el servidor, y en el segundo ejemplo se hara en el cliente.

Consideraciones Generales

La utilizacin de la funcin solo es vlida dentro de For eachs y Conditions de subfiles con tabla base.

Para el resto de los generadores y DBMSs, la funcin IsNull() se comporta igual que la funcin Null().

También podría gustarte