我需要转换一个类似于:
的char列10/04/2012
23/01/2006
20/09/2006
20/09/2006
到datetime。
如果我这样做,这是有效的:
Select field, convert(datetime, [field], 103) from tablex
我得到了
10/04/2012 2012-04-10 00:00:00.000
23/01/2006 2006-01-23 00:00:00.000
20/09/2006 2006-09-20 00:00:00.000
20/09/2006 2006-09-20 00:00:00.000
但是我需要在alter table语句中执行它(我不想创建另一个列并删除前一个列,它必须是一步完成此操作的方法):
alter table tablex
alter column field datetime (103)
错误讯息:
列,参数或变量#27:无法指定列宽 数据类型datetime。
如何在alter table语句中转换字段,或者至少不创建另一个字段然后删除前一个字段? 感谢。
答案 0 :(得分:-1)
我要做的是首先将列中的数据转换为美国格式。然后,您可以将列更改为datetime而不指定格式。
以下是使用临时表的示例:
CREATE TABLE #t ( col1 VARCHAR(50) )
INSERT INTO #t ( col1 ) VALUES ( '10/04/2012' )
INSERT INTO #t ( col1 ) VALUES ( '23/01/2006' )
INSERT INTO #t ( col1 ) VALUES ( '20/09/2006' )
INSERT INTO #t ( col1 ) VALUES ( '20/09/2006' )
UPDATE #t SET col1 = CONVERT(VARCHAR, CONVERT(DATETIME, col1, 103 ))
ALTER TABLE #t ALTER COLUMN col1 DATETIME
SELECT col1 FROM #t
DROP TABLE #t