Las bases de datos están presentes en gran cantidad de aplicaciones, tanto web, como de sobremesa. SQL es el lenguaje más difundido para acceder y manipular información de bases de datos.
Desde el apartado de Presentaciones de este blog, accede a una nueva, para ver, a través de más de noventa páginas, un repaso con ejemplos de las principales sentencias de este lenguaje, utilizando como base MYSQL.
La mayoría de los apartados que podrás ver, se pueden aplicar también a otros motores de bases de datos, como Microsoft SQL o incluso Microsoft Access.
día a día me encuentro con multitud de preguntas y de problemas informáticos a los que intento dar respuesta. Espero que las soluciones que doy a mis problemas y dudas puedan servir a otras personas
Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas
jueves, 4 de diciembre de 2014
martes, 27 de diciembre de 2011
Usar remplazar en SQL para borrar parte de un texto
Más de una vez me ha pasado, que
he necesitado eliminar parte del contenido de un campo de texto, por ejemplo,
porque se ha creado ese texto con información incorrecta mediante programación.
Este error se ha detectado al cabo de un tiempo afectando a un volumen alto de
registros, que impide la corrección manual de los mismos.
La forma más sencilla, es crear
una consulta de actualización con REPLACE. Este comando necesita los siguientes
valores
- La cadena de texto o el campo de texto donde buscar el contenido a remplazar
- El texto a buscar
- El texto que lo sustituye
- La posición de inicio a partir de donde queremos que lo busque
- Número de veces que queremos que lo sustituya
- Tipo de comparación de las dos cadenas
Si quiero utilizar este comando
para borrar parte de un texto, el parámetro “texto que sustituye” le indicaremos
‘’ (2 comillas simples) de tal manera que si encuentra el texto a buscar lo
sustituirá por estas comillas o lo que es lo mismo por nada
Pongamos un ejemplo
Tenemos una tabla pedidos donde
tenemos un campo comentarios que contiene el texto “almacén clientes” y que
queremos quitar, ya que a la hora de imprimir el pedido, no queremos que
aparezca.
Una forma de eliminar el texto es
con replace, actualizando el campo comentarios de todas los registros de pedidos
Update pedidos
Set
pedidos.comentario=REPLACE(pedidos.comentario,”Almacén Clientes”,’’)
Información sobre las funciones de
texto en transact SQL en MSDN
miércoles, 29 de junio de 2011
SQL injection a la cabeza del top 25 de Errores de Software
Se acaba de publicar -27 de Junio de 2011- en la web de SANS Institute y de CWE el estudio “2011 CWE/SANS Top 25 Most Dangerous Software Errors” (2011 CWE/SANS Los 25 Errores de Software más Peligrosos).
Me llama la atención que el más detectado haya sido el SQL Injection, ya que es un tema que cuando hablas de seguridad en la programación de aplicaciones, siempre se hace referencia.
En el estudio presentan el punto CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') (Impropia Neutralización de Elementos Especiales usados en un SQL Command ) con una descripción del problema, ejemplos de cómo se produce el ataque y técnicas de programación para evitar los casos más obvios.
SQL Injection consiste en introducir código SQL en casillas de texto de aplicaciones web con intención de ejecutar sentencias contra la base de datos que no están permitidas por el diseño de la aplicación.
Un artículo interesante sobre este problema lo podemos encontrar en la Wikipedia, Inyección SQL
SQL Injection consiste en introducir código SQL en casillas de texto de aplicaciones web con intención de ejecutar sentencias contra la base de datos que no están permitidas por el diseño de la aplicación.
Un artículo interesante sobre este problema lo podemos encontrar en la Wikipedia, Inyección SQL
miércoles, 1 de septiembre de 2010
Evitar redondeo automático en SQL
Últimamente he tenido un problema con el redondeo utilizando el operador división (/) en una consulta de SQL, para el origen de datos de un informe en un proyecto Microsoft Access Project (.adp)
El problema es que al dividir dos enteros me trunca de forma automática el resultado. La explicación al problema esta en http://technet.microsoft.com/en-us/library/ms175009.aspx. Básicamente es que cuando el divisor y el dividendo son enteros el resultado lo convierte a entero.
La solución es sencilla, convertir uno de los dos operando a float o a real con CAST para que el operador “/” no convierta el resultado a entero. La conversión hay que hacerla de uno de los operandos y no del resultado, ya que la división ya lo devuelve truncado y aunque lo conviertas no va a haber cambios
Información sobre CAST en http://technet.microsoft.com/en-us/library/aa226054(SQL.80).aspx
Por ejemplo. Si tenemos una tabla tbventas con una columna impVenta y otra nArtículos de tipo entero si queremos que nos devuelva los decimales tendría que ser así:
Select CAST(impVenta as float)/cArticulos as valorMedio
from tbventas
jueves, 15 de abril de 2010
DateDiff y CASE para agrupar por rangos de edad a partir de la fecha de nacimiento en SQL
Es muy normal almacenar en las bases de datos la fecha de nacimiento en vez de la edad y calcular a partir de ese valor la edad en cada ocasión que sea necesario.
Este cálculo lo podemos hacer muy fácil con DateDiff . Esta función necesita el tipo de comparación de fechas (años, meses…) la fecha inicial y la fecha final, devolviendo el valor que separa las dos fechas en base al tipo de comparación
DATEDIFF(year, tbPersona.FNAC, { fn NOW() })
Esto lo podemos complicar un poco más si lo que necesitamos no es la edad exacta sino que tenemos que englobar esa edad dentro de un rango (menores de 18, entre 18 y 40,…) Para esto podemos utilizar CASE, indicando según la edad el rango al que pertenece.
CASEWhen edad <19 THEN ‘menor edad’WHEN edad <41 THEN ‘Entre 18 y 40ELSE ‘Mayor 40’END
Si unimos los dos puntos anteriores podemos crear una consulta que nos agrupe por franjas de edad a partir de la fecha de nacimiento
SELECT COUNT(Persona.ID) AS PersonasCASEWHEN DATEDIFF(year, Persona.FNAC, { fn NOW() }) < 25 THEN '16-24'WHEN DATEDIFF(year, Persona.FNAC, { fn NOW() }) < 45 THEN '25-44'ELSE '45-65'END AS EdadFROM PersonaGROUP BY CASE WHEN DATEDIFF(year, Persona.FNAC, { fn NOW() }) < 25 THEN '16-24' WHEN DATEDIFF(year, Persona.FNAC, { fn NOW() }) < 45 THEN '25-44' ELSE '45-65' END
lunes, 28 de septiembre de 2009
Un informático en el lado del mal: Conection String Attacks (I de VI)
Una serie de artículos muy interesantes sobre los principales problemas y soluciones a la hora de definir conexiones a las bases de datos de SQL desde .NET
Un informático en el lado del mal: Conection String Attacks (I de VI)
Un informático en el lado del mal: Conection String Attacks (I de VI)
Suscribirse a:
Entradas (Atom)
