Posts Tagged ‘SQL’

Separar nombre y apellidos en campos distintos

20/10/2009

En Junio un lector accidental de los que pasan por aquí, Alonso Urmendi ,me pidio ayuda en un comentario para separar el nombre y los apellidos de una persona que le venían en un solo campo, en dos campos distintos, uno para el nombre y otro para los apellidos.

Siento no haberte ayudado en su momento Alonso, pero como habrás comprobado, no paso mucho por aquí, por lo que hasta hoy que he puesto una entrada nueva no lo había visto.

Me imagino que a estas alturas Alonso lo tendrá solucionado (si algún día pasas por aquí pon como lo resolviste  en los comentarios ;D), pero de todas formas dejo una manera de hacerlo por si puede ayudar a otros, aquí va:

 

declare @nombreApellido as varchar(40)
declare @nombre as varchar(40)
declare @apellido as varchar(40)
set @nombreApellido='PEDRO GOMEZ PEREZ'
select @nombreApellido as [Nombre Completo]
set @nombre =(select substring(@nombreApellido,0,( PATINDEX('% %',@nombreApellido))))
set @apellido =(select substring(@nombreApellido,( PATINDEX('% %',@nombreApellido) + 1),len(@nombreApellido)))
select @nombre as Nombre
select @apellido as Apellidos

Borrar contenido de fichero excel desde dtsx SSIS

20/10/2009

Tal y como me pasó con los dts de SQL2000, nunca he tenido tiempo de encontrar una manera de borrar el contenido de un fichero excel desde un paquete dts de SQL2005. Esto provoca que la exportación de datos periódica y no incremental a dichos ficheros  sea un lío, puesto que si ejecutas el dts varias veces, provocas que se vayan añadiendo los datos, pero si entre ejecuciones borras el fichero también falla porque no existe.  Al final, siempre resolvía el asunto exportando los datos en un fichero plano con formato csv, ya que el usuario lo abriría como si fuera un xls, picando dos veces encima :D.

Pues bien, hoy me he puesto cabezón y me he empeñado en buscar una solución y he dado con una que me ha funcionado. 

De manera esquemática los pasos a añadir al flujo de control serían estos:

  • Crear un administrador de conexión con el fichero excel de marras
  • Crear una Tarea de secuencia de comandos en la que se incluya la instrucción: System.IO.File.Delete(“path del fichero excel”)
  • Añadir una Tarea ejecutar SQL, que haga el create de la tabla en el excel, este create se puede copiar del que genera en el flujo de datos que tiene como destino el fichero excel.
  • Crear un flujo de datos que tenga el origen que nos haga falta y como destino el fichero excel.

Para dejarlo más fino, lo suyo es meter, como mínimo, la ruta del fichero excel en un fichero de configuración o una variable … pero eso es otra historia.

Obtener separador de miles en una sentencia de transact sql

28/04/2009

Hoy he leido en un foro una solución a un problema que he tenido varias veces y nunca había acabado de resolver, consiste en poner el separador de miles a las cantidades obtenidas en una sentencia de sql, para conseguir que sean más legibles. Lo he leído aquí y pongo el ejemplo para ver el resultado:

select CONVERT(VarChar(50), cast( 123456789.1 as money ), 1)

El resultado será
—————–
123,456,789.10

(1 filas afectadas)

Obtener número de registros de varias tablas en SQL 2005

28/04/2009

Mira por donde, hoy estoy encontrando solución a varias cosillas que había querido hacer antes y por tiempo no me habían salido. En este caso, lo que pretendía era obtener el número de registros de todas las tablas de una base de datos, para saber cuales son las más pesadas. La manera rápida y potente que he encontrado es usar la tabla sysindexes. En mi caso la he usado de esta forma:

select object_name(id) nombreTabla, convert(varchar(50), cast(rowcnt as money),1) nRegistros from sysindexes

Si se quiere la de una tabla en concreto, se puede poner un where indicando el nombre de tabla:

select object_name(id) nombreTabla, convert(varchar(50), cast(rowcnt as money),1) nRegistros from sysindexes where id=object_id(‘Nombre de tabla’)