none
guardar un dia del mes RRS feed

  • Pregunta

  • estimados

    tengo un campo en mi base de datos un campo mes mes y quiero que se guarde siempre el el primer día del mes escogido

    el datetimepicker por ejemplo 23/08/2018 guarde 01/08/2018

    23/07/2018 guarde 1/07/2018 muchas gracias de antemano

    atte.

    weimar

    viernes, 24 de agosto de 2018 16:00

Respuestas

  • Veo que la pregunta la pusiste en el foro de SQL Server, y no en el foro del lenguaje cliente que estás usando para acceder al datetimepicker. ¿Significa eso que quieres forzar ese tipo de operación en el lado servidor? Lo digo porque si lo hicieras en lado cliente sería sencillísimo usando las funciones de manipulación de fecha sobre el Value del DateTimePicker antes de pasarle el valor al SQL Server.

    Pero si lo quieres hacer en lado servidor, es más complejo. Primero habría que restringir los permisos de la tabla para que no se pueda acceder a ella directamente. Y después crear una forma de acceso como por ejemplo un procedimiento almacenado, o una vista con un trigger de inserción. El cliente pasaría el DateTime a ese procedimiento o Vista y éste calcularía con ese DateTime el primer día del mes para guardarlo en la tabla. Otra opción, si el campo de la tabla es del mismo tipo, es ponerle un trigger que realice la conversión.

    Como ves, se pueden complicar las cosas si lo intentas hacer en lado Servidor. Por lo tanto, antes de meternos con ello, sería conveniente conocer las razones por las que no lo quieres hacer en lado cliente, que sería mucho más fácil. Ojo, no contestes diciendo solamente "sí, lo quiero hacer en lado cliente". Si es así, hay que explicar cuál es el lenguaje cliente que usas y la tecnología de acceso a datos que le has metido al programa, y cómo la invocas a partir del DateTimePicker, si es que quieres que podamos indicar dónde meter el código de conversión de la fecha.

    viernes, 24 de agosto de 2018 16:27
  • Hola:

    Adicionalmente a lo que te dice Alberto, para obtener el primer día del mes y ya que aún estas en este foro, en SQL Server, puedes hacerlo por ejemplo, de este modo:

    /* Sustituyendo getdate() que te devuelve la fecha de hoy, si quieres, por otra fecha */
    
    SELECT dateadd(day,1,( EOMONTH ( getdate(), -1 ))) as primerDiaDelMes 

    Un saludo

    • Marcado como respuesta Weimaram viernes, 24 de agosto de 2018 21:02
    viernes, 24 de agosto de 2018 20:56
  • muchas gracias

    me sirvió de mucho

    mil disculpas nuevamente

    atte. weimar

    • Marcado como respuesta Weimaram viernes, 24 de agosto de 2018 21:02
    viernes, 24 de agosto de 2018 21:01

Todas las respuestas

  • Veo que la pregunta la pusiste en el foro de SQL Server, y no en el foro del lenguaje cliente que estás usando para acceder al datetimepicker. ¿Significa eso que quieres forzar ese tipo de operación en el lado servidor? Lo digo porque si lo hicieras en lado cliente sería sencillísimo usando las funciones de manipulación de fecha sobre el Value del DateTimePicker antes de pasarle el valor al SQL Server.

    Pero si lo quieres hacer en lado servidor, es más complejo. Primero habría que restringir los permisos de la tabla para que no se pueda acceder a ella directamente. Y después crear una forma de acceso como por ejemplo un procedimiento almacenado, o una vista con un trigger de inserción. El cliente pasaría el DateTime a ese procedimiento o Vista y éste calcularía con ese DateTime el primer día del mes para guardarlo en la tabla. Otra opción, si el campo de la tabla es del mismo tipo, es ponerle un trigger que realice la conversión.

    Como ves, se pueden complicar las cosas si lo intentas hacer en lado Servidor. Por lo tanto, antes de meternos con ello, sería conveniente conocer las razones por las que no lo quieres hacer en lado cliente, que sería mucho más fácil. Ojo, no contestes diciendo solamente "sí, lo quiero hacer en lado cliente". Si es así, hay que explicar cuál es el lenguaje cliente que usas y la tecnología de acceso a datos que le has metido al programa, y cómo la invocas a partir del DateTimePicker, si es que quieres que podamos indicar dónde meter el código de conversión de la fecha.

    viernes, 24 de agosto de 2018 16:27
  • Muchas Gracias por su respuesta

    y si tiene mucha razón porque hacerlo en el lado servidor sera muy complicado así lo veo... estoy usando visual studio 2013 con conexion a sql server 2008 r2 con datasets, (mil disculpas por no haber puesto todo completo ) lo mejor seria hacer que el lado cliente se guarde el dato ya que requiero que guarde el 1 dia del mes por mas ponga cualquier dia guarde asi como le di el ejemplo

    el datetimepicker por ejemplo 23/08/2018 guarde 01/08/2018

    23/07/2018 guarde 1/07/2018 muchas gracias de antemano

    gracias de antemano

    atte weimar

    viernes, 24 de agosto de 2018 19:40
  • Bien, para tomar el primer día del mes se puede hacer esto (pongo el ejemplo en C# porque no has dicho en qué lenguaje trabajas):

    DateTime fechaSeleccionada = dateTimePicker1.Value;
    DateTime primerDiaMes = new DateTime(fechaSeleccionada.Year, fechaSeleccionada.Month, 1);
    // Ahora usamos primerDiaMes para grabarlo en la BD

    Recuerda que estamos en el foro de SQL Server. Si necesitas más ayuda con código cliente convendría continuar la conversación en el foro que le corresponda, tal como por ejemplo el de C# (si usas este lenguaje), o el de ADO.NET.


    viernes, 24 de agosto de 2018 20:28
  • Hola:

    Adicionalmente a lo que te dice Alberto, para obtener el primer día del mes y ya que aún estas en este foro, en SQL Server, puedes hacerlo por ejemplo, de este modo:

    /* Sustituyendo getdate() que te devuelve la fecha de hoy, si quieres, por otra fecha */
    
    SELECT dateadd(day,1,( EOMONTH ( getdate(), -1 ))) as primerDiaDelMes 

    Un saludo

    • Marcado como respuesta Weimaram viernes, 24 de agosto de 2018 21:02
    viernes, 24 de agosto de 2018 20:56
  • muchas gracias

    me sirvió de mucho

    mil disculpas nuevamente

    atte. weimar

    • Marcado como respuesta Weimaram viernes, 24 de agosto de 2018 21:02
    viernes, 24 de agosto de 2018 21:01