SQL-transact- alter column -char到datetime -103

时间:2016-06-22 14:32:44

标签: sql sql-server tsql date datetime-format

我需要转换一个类似于:

的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语句中转换字段,或者至少不创建另一个字段然后删除前一个字段? 感谢。

1 个答案:

答案 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