SQL - Convertir o modificar campo de tabla al exportar con sqlcmd

 
Vista:

Convertir o modificar campo de tabla al exportar con sqlcmd

Publicado por Cristian Cornejo (4 intervenciones) el 18/07/2012 19:21:32
Estimados, es un agrado saludarles, tengo el siguiente problema, estoy exportando datos con una tarea programada desde SQL con la utilidad sqlcmd:

la sentencia:

sqlcmd -S EQUIPOC\INSTANCIA -o C:\Datos.txt -U USUARIO -P PASSWORD -d BASEDEDATOS -Q "set nocount on; SELECT [Campo1], [Campo2], [Campo3], [Campo4] FROM Tabla " -h-1 -s ";"

Mi problema es que dentro de la tabla, el campo1 necesito modificarlo al exportarlo al TXT, toda la estructura es perfecta y los datos se ven correctamente, pero el campo1 necesito lo cambiar de dato, en este caso el dato del campo1 es "3" y necesito cambiarlo por "115", existe alguna manera de hacerlo con ALTER TABLE o algun otro comando y que se refleje en el archivo exportado?,

En otro tema del mismo caso, al exportar el archivo se exportan las fechas sin limite, lo que quiero es seleccionar desde las 08 HRS hasta las 23 HRS, osea una fecha especifica, pues la tarea programada se ejecuta todos dias y necesito extraer fechas distintas, del dia correspondiente, como una fecha dinamica, suponiendo que hoy 18 extraiga desde las 08 HRS hasta las 23 HRS, y mañana 19 desde las 08 HRS hasta las 23 HRS y asi susesivamente, esta es la estructura del TXT exportado:

3;2012-07-17 13:00:00.000; 57; 45
3;2012-07-17 14:00:00.000; 24; 22
3;2012-07-17 15:00:00.000; 0; 0
3;2012-07-17 16:00:00.000; 140; 119
3;2012-07-17 17:00:00.000; 90; 99
3;2012-07-17 18:00:00.000; 13; 20
3;2012-07-17 19:00:00.000; 0; 0
3;2012-07-17 20:00:00.000; 0; 0
3;2012-07-17 21:00:00.000; 0; 0
3;2012-07-17 22:00:00.000; 0; 0
3;2012-07-17 23:00:00.000; 0; 0
3;2012-07-18 00:00:00.000; 0; 0
3;2012-07-18 01:00:00.000; 0; 0
3;2012-07-18 02:00:00.000; 0; 0
3;2012-07-18 03:00:00.000; 0; 0
3;2012-07-18 04:00:00.000; 0; 0
3;2012-07-18 05:00:00.000; 0; 0
3;2012-07-18 06:00:00.000; 0; 0
3;2012-07-18 07:00:00.000; 0; 0
3;2012-07-18 08:00:00.000; 1; 0
3;2012-07-18 09:00:00.000; 42; 33
3;2012-07-18 10:00:00.000; 93; 125
3;2012-07-18 11:00:00.000; 54; 67

Por favor agradeceria su amable ayuda.

Gracias
Cristian
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Convertir o modificar campo de tabla al exportar con sqlcmd

Publicado por leonardo_josue (1173 intervenciones) el 18/07/2012 20:29:36
Hola Cristian Cornejo:

A ver si entendí bien. para la primer pregunta, si el primer campo SIEMPRE TIENE QUE SER 115, entonces no tiene caso que lo invoques, sino que puedes colocar un valor constante en el select, es decir, algo como esto:

1
2
3
...
SELECT 115 as Campo1, [Campo2], [Campo3], [Campo4] FROM Tabla
...


Si por el contrario, el primer campo puede tomar valores distintos de 115, y solo cuando sea igual a 3 cambiarlo por 115 deberás utilizar una sentencia CASE-WHEN para hacer la comparación y la transformación.

1
2
3
.....
SELECT CASE WHEN [Campo1] = 3 THEN 115 ELSE [Campo1] END
....


Para el caso de las fechas, tendrías que implementar un filtro WHERE, en estos momentos no tengo instalado SQL Server en mi equipo para poder hacer alguna prueba, pero sería más o menos así:

...
1
2
3
4
5
6
WHERE
convert(datetime, convert(varchar, [Campo2], 108), 108)
between
convert(datetime, '08:00:00', 108) AND
convert(datetime, '23:00:00', 108)
...


La doble conversión al inicio es para extraer sólo la hora, sin considerar la fecha. Faltaría considerar también que las fechas correspondan a la fecha actual CURDATE(), pero eso te lo dejo a tí. Haz la prueba para ver si te sirve, y si continuas con problemas lo comentas para tratar de ayudarte.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Convertir o modificar campo de tabla al exportar con sqlcmd

Publicado por Cristian Cornejo (4 intervenciones) el 18/07/2012 20:59:15
Genial Leo!, ya tengo el problema de la primera columna solucionado.

En el otro caso, la tarea programada funciona cada 1 hora el cual toma datos del dia en cursodesde las 8HRS hasta las 23 HRS del 18 de Julio, luego mañana la misma tarea programada (sqlcmd -S EQUIPOC\INSTANCIA -o C:\Datos.txt -U USUARIO -P PASSWORD -d BASEDEDATOS -Q "set nocount on; SELECT [Campo1], [Campo2], [Campo3], [Campo4] FROM Tabla " -h-1 -s ";") tiene que extraer datos del mismo rango de horas pero con la fecha de mañana, en este caso 19 de Julio.

Este es el caso que no entiendo mucho y necesito alguna explicacion para poder entenderlo mejor, la explicacion que me indicaste esta perfecta pero lo escribo de todos modos para que me des alguna referencia.

Muchas greacias!..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Convertir o modificar campo de tabla al exportar con sqlcmd

Publicado por leonardo_josue (1173 intervenciones) el 18/07/2012 21:35:42
Hola de nuevo Cristian...

Creo que tienes claro lo que necesitas, pero no estoy seguro que hayas intentado hacer algunas pruebas para ver cómo puedes hacer la consulta... Ojo con eso, no esperes encontrar en el foro una solución sólo para copiar y pegar. Aquí se te darán guías, pero es necesario que las consultas las hagas por tu cuenta... SAN GOOGLE puede resultar de mucha ayuda, si no tienes experiencia en el manejo de fechas deberías comenzar por eso, investigar cómo trabaja la función CONVERT que puse en el ejemplo para ver cómo se puede ayudar a resolver el resto. Te pongo un ejemplo para ver si entiendes a qué me refiero. Por lo que se puede deducir, tu Campo2, donde almacenas la fecha es de tipo datetime, eso quiere decir que almacena tanto la fecha como la hora... Si investigas un poco acerca de las funciones de HORA y FECHA de SQL Server

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

la función GETDATE() te regresa la fecha y la hora actual, PERO EN TU CASO SÓLO necesitas la fecha... la función CONVERT te sirve para dar formato a esa fecha y extraer SOLO LO QUE NECESITAS, en el ejemplo que puse el código 108 indica que se extraiga SÓLO LA HORA, no la fecha....

Podría extenderme mucho más en ese tema, pero no es el caso, me gustaría que investigaras por tu cuenta cómo podrías hacer este filtrado, si tienes problemas dinos qué es lo que haz intentado hacer y con gusto te tratamos de ayudar.

saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Convertir o modificar campo de tabla al exportar con sqlcmd

Publicado por Cristian Cornejo (4 intervenciones) el 18/07/2012 21:39:24
Gracias Leo.

Entendi perfectamente lo que me explicaste en la primera respuesta y en la segunda. Pero tal como tu dices no tenia referencia de los comandos GETDATE, por lo que usarla por sqlcmd me resultaba muy precario, pero ya veo que existe una solucion. Hice la prueba con el comando que me recomendaste y anda perfecto. Ahora me dedicare a entender mas sobre este comando y sus funciones.

Agradezdo demasiado tu ayuda, me salvaste el dia.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Convertir o modificar campo de tabla al exportar con sqlcmd

Publicado por Cristian Cornejo (4 intervenciones) el 18/07/2012 22:07:40
Leo, una ultima pregunta.

Existe algun comando para poder extraer del campo DateTimeStamp, la fecha y hora independiente una de la otra?

3;2012-07-17 13:00:00.000; 57; 45

hasta ahora el comando sqlcmd:

sqlcmd -S EQUIPOC\INSTANCIA -o C:\Datos.txt -U USUARIO -P PASSWORD -d BASEDEDATOS -Q "set nocount on; SELECT 115 as Campo1, [Campo2], [Campo3], [Campo4] FROM Tabla WHERE convert(datetime, convert(varchar, [Campo2], 108), 108) between convert(datetime, '08:00:00', 108) AND convert(datetime, '23:00:00', 108) " -h-1 -s ";"

Ahora necesito si me podrías ayudar entendiendo como extraer la fecha y la hora en campos distintos por favor.

Muchas gracias Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Convertir o modificar campo de tabla al exportar con sqlcmd

Publicado por leonardo_josue (1173 intervenciones) el 18/07/2012 23:24:45
Hola de nuevo

Tal como te lo comenté en el post pasado, debes darle un vistazo a la función CONVERT, te

1
2
3
la función CONVERT te sirve para dar formato a esa fecha y extraer SOLO LO QUE
NECESITAS, en el ejemplo que puse el código 108 indica que se extraiga
SÓLO LA HORA, no la fecha....


Checa esta liga:

http://lmgtfy.com/?q=funci%C3%B3n+convert+sql+server

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar