2011-04-28 20 views
5

Tengo la siguiente columna date en una base de datos de SQL Server.T-SQL: Convertir la columna de fecha varchar al tipo de fecha

El tipo de datos es actualmente varchar, y las fechas se almacenan en el siguiente formato: 2010-04-24

estoy ejecutando el siguiente comando:

ALTER TABLE games ALTER COLUMN date date 

pero me da el siguiente error:

ERROR: Conversion failed when converting date and/or time from character string.

¿Qué estoy haciendo mal?

Respuesta

7

Puede haber algunas fechas que no funcionan. ¿Cuál versión de SQL Server estás usando? Supongo que 2008, si tiene un tipo de datos DATE, ¿verdad?

Mi sugerencia sería:

1) Crear una nueva columna de tipo DATE

ALTER TABLE dbo.Games 
    ADD NewDate DATE 

2) ejecutar un script de actualización en su mesa y ver qué entradas no podría convertir en DATE

UPDATE dbo.Games 
SET NewDate = CAST([date] AS DATE) 
WHERE ISDATE([date]) = 1 

La comprobación de ISDATE() = 1 debe filtrar las entradas que no se pueden convertir a DATE tipo de datos.

Una vez que todas las entradas se han convertido con éxito, siempre se puede soltar la columna de la antigua [date] y cambiar el nombre de la nueva columna de nuevo a [date] - pero utilizando una palabra reservada como DATE un nombre de columna no es muy inteligente - que había trate de usar algo más hablando, algo más expresivo (relacionado con el dominio del problema en el que se encuentra).

+0

Suena bien, pero ahora recibo el siguiente error cuando trato de ejecutar la línea de actualización: ERROR: El método executeQuery debe devolver un conjunto de resultados. – kylex

+0

Estoy ejecutando el script directamente usando RazorSQL. – kylex

+0

@kylex: OK - entonces su herramienta debe tener un requisito divertido ... esta declaración debería funcionar bien en SQL Server Mgmt Studio ... –

Cuestiones relacionadas