none
No puedo formatear el mes con cero a la izquierda RRS feed

  • Pregunta

  • Hola amigos del foro: Quiero crear una variable que contenga el mes de la fecha con un cero a la izquierda, pero la variable me queda en blanco, ¿cual es mi error?

    DECLARE @ElPeriodo Char(2)
    DECLARE @FechaDeCierre Date
    SET @FechaDeCierre=GETDATE()
    SET @ElPeriodo=  RIGHT('00' + CAST(MONTH(@FechaDeCierre) AS char),2)  
    select @ElPeriodo AS Resultado   "Aquí la variable me sale en blanco"

    Gracias por la ayuda.

    viernes, 29 de septiembre de 2017 0:33

Respuestas

  • Nota la siguiente expresión: 'CAST(MONTH(@FechaDeCierre) AS char)'.

    Resultado: |09                            |

    No defines la longitud para el tipo char, por tanto se considera la longitud predeterminada (30) dado que -el tipo char- participa como argumento de la función CAST() y como observas las dos últimas posiciones son dos caracteres de espacio en blanco. 

    DECLARE @Option1 char(2) = RIGHT(CONCAT('00', MONTH(GETDATE())), 2);
    DECLARE @Option2 char(2) = FORMAT(GETDATE(), 'MM');
    SELECT @Option1, @Option2;
    GO

    TEST ON LINE



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.

    • Propuesto como respuesta Jorge TurradoMVP viernes, 29 de septiembre de 2017 8:35
    • Marcado como respuesta Carlos Cuenta lunes, 2 de octubre de 2017 0:06
    viernes, 29 de septiembre de 2017 4:39

Todas las respuestas

  • Hola Carlos Cuenta

    Entiendo que cuando el mes es de un dígito, entonces agregarás un cero a la izquierda, en caso contrario solo mantendrás los dos dígitos del mes? te propongo hacerlo con case:

    -- declaras una variable para guardar el mes:
    declare @mes as int
    -- asignas el valor del mes actual
    set @mes = (select month(getdate()))
    
    --preguntas en caso la longitud sea 1, le agrego un cero, en caso la longitug sea 2, no agrego nada
    select Case when len(@mes) = 1 then '0' + cast(@mes as char(2)) else cast(@mes as char(2)) end
    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    viernes, 29 de septiembre de 2017 4:20
  • Nota la siguiente expresión: 'CAST(MONTH(@FechaDeCierre) AS char)'.

    Resultado: |09                            |

    No defines la longitud para el tipo char, por tanto se considera la longitud predeterminada (30) dado que -el tipo char- participa como argumento de la función CAST() y como observas las dos últimas posiciones son dos caracteres de espacio en blanco. 

    DECLARE @Option1 char(2) = RIGHT(CONCAT('00', MONTH(GETDATE())), 2);
    DECLARE @Option2 char(2) = FORMAT(GETDATE(), 'MM');
    SELECT @Option1, @Option2;
    GO

    TEST ON LINE



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.

    • Propuesto como respuesta Jorge TurradoMVP viernes, 29 de septiembre de 2017 8:35
    • Marcado como respuesta Carlos Cuenta lunes, 2 de octubre de 2017 0:06
    viernes, 29 de septiembre de 2017 4:39
  • Gracias por la ayuda, excelente.
    lunes, 2 de octubre de 2017 0:07