Tengo una tabla con dos columna de la fecha. Sin embargo, las columnas son de tipo varchar. Necesito encubierta como formato de fecha.

Los datos de la muestra es como este:

Número De Cuenta Fecha De Registro | Sistema De Cambio De Estado De Fecha

01740567715 | 10-JUL-13 | 30-JUL-13 12.53.32.000000000 PM

Quiero tanto de estas columnas como esta: 10-Jul-2013.

Para la Fecha de Registro, estoy usando este código:

Update [dbo].[SysDataV2] 
Set ["REGISTRATION_DATE"]= convert(datetime, (["REGISTRATION_DATE"]), 106)

Pero es shwoing el resultado como varchar y también mostrando formato erróneo.

Para el Estado del Sistema de Cambio de Fecha estoy usando el siguiente código:

update [dbo].[SysData] 
Set ["KYC_STATUS_CHANGED_DATE"]= REPLACE(CONVERT(datetime,convert(datetime,left(["KYC_STATUS_CHANGED_DATE"],9),103),106),' ' ,'-')

Ambos están cambiando de formato de fecha de algún tipo (no es mi formato de espera), pero en la estructura de las tablas que siguen se muestra como varchar.

¿Qué estoy haciendo mal aquí?

  • La tabla de tipo de datos es todavía de tipo varchar. Una actualización de los cambios de la cadena de caracteres que almacena, pero no por arte de magia cambiar el tipo de datos.
  • Así que, ¿tengo que ejecutar una consulta de selección con la conversión de la fecha en que hay?
  • No, tienes que cambiar la columna del tipo de datos una vez que los datos son correctos.
  • Sugiero la creación de un nuevo objeto datacolumn de tipo DateTime y la ejecución de un comando de actualización para convertir los datos varchar DateTime en la nueva columna. Una vez que los datos es la manera que usted desea que usted podría quitar la columna original

2 Comentarios

  1. 3

    Necesita cambiar el tipo de datos de la columna de un varchar para guardarlo como un Date. Entonces, cuando usted seleccione se puede dar formato a ella de cualquier manera que te gusta. Una forma de hacerlo sería crear una nueva columna de tipo de datos correcto y convertir los datos, a continuación, retire la columna anterior. Asegúrese de que el la columna anterior no tiene y de relaciones de clave externa o usted también tendrá que transferir a los de más así.

    ALTER TABLE [dbo].[SysData] ADD ConvertedDate DateTime
    UPDATE [dbo].[SysData] SET ConvertedDate = CAST(VarCharDate as DateTime)
    ALTER TABLE [dbo].[SysData] DROP COLUMN VarCharDate
  2. 4

    De la tabla de tipo de datos es todavía de tipo varchar. Una actualización simplemente cambia la cadena, no cambia el tipo de datos. Lo que usted debe hacer es (suponiendo que todas las fechas son válidas y este formato es 100% consistente):

    UPDATE dbo.SysData SET REGISTRATION_DATE = 
     CONVERT(CHAR(10), CONVERT(DATE, REGISTRATION_DATE, 106), 120);
    
    UPDATE dbo.SysData SET KYC_STATUS_CHANGED_DATE = 
       CONVERT(CHAR(10), CONVERT(DATETIME, LEFT(KYC_STATUS_CHANGED_DATE, 9), 106), 120) 
        + REPLACE(SUBSTRING(KYC_STATUS_CHANGED_DATE, 10, 9), '.',':') 
        + RIGHT(KYC_STATUS_CHANGED_DATE, 2);
    
    ALTER TABLE dbo.SysData ALTER COLUMN REGISTRATION_DATE DATE;
    ALTER TABLE dbo.SysData ALTER COLUMN KYC_STATUS_CHANGED_DATE DATETIME;

    Y, a continuación, detener la inserción regional y potencialmente problemático cadenas. Los literales de cadena en representación de fechas /datetimes debe ser:

    -- date only
    YYYYMMDD
    
    -- with time:
    YYYY-MM-DDThh:mm:ss.nnn

    Pero lo mejor es simplemente asegúrese de que estén fecha o fecha y hora valores antes de que usted la mano a SQL Server. Su aplicación debe ser capaz de hacer esto sin la conversión a arbitraria en el formato de cadena. Nunca, jamás, tienda de fecha o fecha y hora valores como cadenas en SQL Server. Usted no gana nada y se pierde bastante.

Dejar respuesta

Please enter your comment!
Please enter your name here