none
Como extraer los datos con SQLCMD solo de la fecha de hoy

    Question

  • Estimados, hola a todos, quisiera exponer mi consulta al foro, estoy haciendo una tarea programada un .bat con un comando de sqlcmd, mi objetivo es extraer de una tabla separando algunos campos. Primero genero el nombre del archivo dinamicamente dependiendo del año, mes, y dia, luego tengo un campon DateTimeStamp el cual tuve que separar en dos columnas, primero nombrando la columna con el numero que necesito "151", luego extraigo solo la fecha del Campo DateTimeStamp con la funcion convert, luego extraigo solamente la hora del campo DateTimeStamp con la funcion datepart y la opcion HH, luego dos campos que extraigo sin problemas IN y OUT y al final ocupo la funcion convert para seleccionar un tipo de horario dentro de las 24 horas del dia, seleccionando entre las 08 hrs y las 23hrs el cual me resulta sin problemas. Mi problema es ¿como puedo hacer para que pueda extraer solo la fecha del dia actual que abarque desde las 08HRS hasta las 23HRS y sacar el resto de los datos delos dias anteriores?, pongo como ejemplo el resultado del bat:

    151;20120717;13;57;45
    151;20120717;14;24;22
    151;20120717;15;0;0
    151;20120717;16;140;119
    151;20120717;17;90;99
    151;20120717;18;13;20
    151;20120717;19;0;0
    151;20120717;20;0;0
    151;20120717;21;0;0
    151;20120717;22;0;0
    151;20120717;23;0;0
    151;20120718;8;1;0
    151;20120718;9;42;33
    151;20120718;10;93;125
    151;20120718;11;114;124
    151;20120718;12;184;206
    151;20120718;13;41;43
    151;20120718;14;9;2
    151;20120718;17;253;247
    151;20120718;18;46;34
    151;20120718;19;0;1
    151;20120718;20;0;0
    151;20120718;21;0;0
    151;20120718;22;0;0
    151;20120718;23;0;0
    151;20120719;8;0;0
    151;20120719;9;0;0
    151;20120719;10;0;0
    151;20120719;11;13;19
    151;20120719;12;229;214
    151;20120719;13;239;230
    151;20120719;14;236;201
    151;20120719;15;95;87

    Como se ve, me muestra fechas de hace 3 dias, y quiero generarlo solo para el dia actual.

    Aqui tengo la linea de comando, no se si puedo sacarle provecho a la funcion convert para hacer lo que necesito, la enmarco dentro del comando:

    sqlcmd -S SERVER\INSTANCIA -o C:\MACOTRAF151%date:~-4%%date:~3,2%%date:~0,2%.txt -E -d DATABASE -W -Q "set nocount on; SELECT 151 as EntranceKey, convert(varchar,DateTimeStamp,112), datepart (hh, [DateTimeStamp]), [In], [Out] FROM FlowHourlyEntrance WHERE convert(datetime, convert(varchar, [DateTimeStamp], 108), 108) between convert(datetime, '08:00:00.000', 108) AND convert(datetime, '23:00:00.000', 108)" -h-1 -s ","

    Alguien es tan amable de ayudarme con este problema?, se los agradeceria demasiado.

    Gracias

    Cristian



    Friday, July 20, 2012 1:55 PM

Answers

All replies

  • Si utilizas versión desde 2008 - haga asi:

    Select ...
    From ...
    Where Cast(MiFecha As Date)=Cast(GetDate() As Date);

    o lo mas simple:

    Select ..
    From ..
    Where DateDiff(Day,GetDate(),MiFecha)=0;


    Blog: http://about.me/GeriReshef


    Friday, July 20, 2012 2:34 PM
  • Geri_Reshef

    Gracias por tu amable respuesta, en efecto tengo sql20008, al generar la consulta me genera el siguiente error:

    Explicit conversion from data type int to date is not allowed

    Por otro lado, estaba viendo el codigo y: ¿a que se refiere la sintaxis mifecha en el comando?, ¿es la fecha que sql empezara a tomar como referencia para diferenciarse de los otros dias?

    Gracias por tu tiempo amigo.

    Cristian

    Friday, July 20, 2012 2:40 PM
  • MiFecha debe ser DateTimeStamp..

    No vi antes que lo mencionaste.


    Blog: http://about.me/GeriReshef

    Friday, July 20, 2012 2:51 PM
  • Geri_Reshef

    Solo me queda una cosa por decir, eres extraordinario. Excelente solucion para aislar la fecha nunca se me habria ocurrido.

    Te agradezdo de corazon amigo mio.

    Cristian

    Friday, July 20, 2012 2:57 PM
  • Hola.

    Con el permiso de Geri, apuntar que, siempre que sea posible, y en este caso lo sería, hay que evitar la aplicación de funciones sobre los campos, para aplicarlas a los parámetros o las constantes. Ello permite utilizar un posible índice que pudiera existir por el campo de la fecha, algo que sería útil si la sentencia fuera a repetirse con frecuencia. Así, el caso podría plantearse más o menos así:

    --Ojo con el tipo de dato de "MiFecha", emplear la conversión pertinente con la función "getdate()"
    Select ...
    From ...
    Where MiFecha >= Cast(GetDate() As Date) and MiFecha < Cast(dateadd(dd, 1, GetDate()) As Date)


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    Tuesday, August 14, 2012 4:01 PM
    Moderator