none
¿Como crear una fecha a partir de otra separa por puntos? RRS feed

  • Pregunta

  • Hola, buena tarde.

    Tengo una columna llamada date, pero contiene información de fechas en el siguiente formato: 04.07.2018

    ¿Cómo crear otra columna con la fecha sin puntos y en formato M/dd/yyyy?

    Saludos.


    Irving Glez

    martes, 18 de septiembre de 2018 19:15

Respuestas

  • Bien, en ese caso un truco es convertir de varchar a datetime diciéndole que aplique un formato, y a continuación de nuevo de datetime a varchar aplicando el otro:

    declare @f varchar(10) = '04.07.2018' -- ejemplo
    
    select convert(varchar, convert(date, @f, 104), 101)

    El 104 significa dd.mm.yyyy y el 101 es mm/dd/yyyy. Puedes encontrar la lista de formatos aquí:

    https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017

    P.D.: Lo que comentabas de que "el equipo está configurado en inglés" es irrelevante a estos efectos. Tendría importancia si la conversión se estuviera realizando el lado cliente usando el currentculture, pero no influye si se hace la conversión en lado servidor dentro del SQL.

    martes, 18 de septiembre de 2018 21:21
  • ¿En que motor de base de datos?

    Todos los motores guardan las fechas en formato NUMÉRICO, debería manejar ANSI (yyyymmdd hh:mm:ss)

    martes, 18 de septiembre de 2018 19:43
  • Ojo, no confundas el Management Studio (que es una aplicación cliente) con el SQL Server (que es el servidor que contiene los datos).

    Si el campo es de tipo DateTime, se guarda en binario y no tiene formato. Cuando un programa cliente lo extrae y te lo muestra en pantalla, en ese momento es el propio programa cliente el que le aplica un formato a ese dato que estaba salvado en binario.

    Si estás seguro de que se guarda ese campo separado con puntos y que no es un artefacto del programa cliente (Management Studio), entonces se infiere que el campo no es de tipo fecha, sino que es de tipo texto. Sería conveniente que comprobaras este extremo y nos confirmaras el tipo de dato, porque las funciones de conversión que hay que aplicar son distintas según que el tipo de dato sea DateTime o sea un Varchar o NVarchar.

    martes, 18 de septiembre de 2018 20:00
  • Gabriel,

    SQL Server Management Studio es una herramienta de usuario.  Me pregunto si la columna es tipo caracter y si el formato que usa es dd.mm.yyyy (Estilo Aleman) y para lo cual puedes usar el estilo 104 en la funcion CONVERT.

    Ejemplo:

    declare @s char(10) = '04.07.2018';

    select @s as [@s], convert(date, @s, 104) as fecha;


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    martes, 18 de septiembre de 2018 20:02

Todas las respuestas

  • ¿En que motor de base de datos?

    Todos los motores guardan las fechas en formato NUMÉRICO, debería manejar ANSI (yyyymmdd hh:mm:ss)

    martes, 18 de septiembre de 2018 19:43
  • SQL Server Management Studio 17. 


    • Editado Gabriel Glez martes, 18 de septiembre de 2018 19:55
    martes, 18 de septiembre de 2018 19:55
  • Ojo, no confundas el Management Studio (que es una aplicación cliente) con el SQL Server (que es el servidor que contiene los datos).

    Si el campo es de tipo DateTime, se guarda en binario y no tiene formato. Cuando un programa cliente lo extrae y te lo muestra en pantalla, en ese momento es el propio programa cliente el que le aplica un formato a ese dato que estaba salvado en binario.

    Si estás seguro de que se guarda ese campo separado con puntos y que no es un artefacto del programa cliente (Management Studio), entonces se infiere que el campo no es de tipo fecha, sino que es de tipo texto. Sería conveniente que comprobaras este extremo y nos confirmaras el tipo de dato, porque las funciones de conversión que hay que aplicar son distintas según que el tipo de dato sea DateTime o sea un Varchar o NVarchar.

    martes, 18 de septiembre de 2018 20:00
  • Gabriel,

    SQL Server Management Studio es una herramienta de usuario.  Me pregunto si la columna es tipo caracter y si el formato que usa es dd.mm.yyyy (Estilo Aleman) y para lo cual puedes usar el estilo 104 en la funcion CONVERT.

    Ejemplo:

    declare @s char(10) = '04.07.2018';

    select @s as [@s], convert(date, @s, 104) as fecha;


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    martes, 18 de septiembre de 2018 20:02
  • Es de tipo nvarchar(255), y mi equipo está configurado en inglés.

    Irving Glez

    martes, 18 de septiembre de 2018 20:33
  • Se encuentra como texto (nvarchar(255)).

    Irving Glez

    martes, 18 de septiembre de 2018 20:34
  • Bien, en ese caso un truco es convertir de varchar a datetime diciéndole que aplique un formato, y a continuación de nuevo de datetime a varchar aplicando el otro:

    declare @f varchar(10) = '04.07.2018' -- ejemplo
    
    select convert(varchar, convert(date, @f, 104), 101)

    El 104 significa dd.mm.yyyy y el 101 es mm/dd/yyyy. Puedes encontrar la lista de formatos aquí:

    https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017

    P.D.: Lo que comentabas de que "el equipo está configurado en inglés" es irrelevante a estos efectos. Tendría importancia si la conversión se estuviera realizando el lado cliente usando el currentculture, pero no influye si se hace la conversión en lado servidor dentro del SQL.

    martes, 18 de septiembre de 2018 21:21
  • con un update, ¿cómo quedaría?

    Irving Glez

    lunes, 15 de octubre de 2018 13:40