varchar到datetime转换

时间:2013-06-04 18:08:33

标签: sql sql-server sql-server-2008

我正在尝试这样做

declare @slice VARCHAR = '2013-06-04 13:42:41.647'
SELECT REPLACE(CONVERT(VARCHAR, CAST(@slice AS DATETIME), 109), ' ', '-')

但我收到错误

  

Msg 241,Level 16,State 1,Line 2
  从字符串转换日期和/或时间时转换失败。

如果我这样做

declare @slice3 VARCHAR = '2013-06-04 13:42:41.647'
SELECT REPLACE(CONVERT(VARCHAR, @slice3 , 109), ' ', '-')

我得到的输出是2

我哪里错了?

1 个答案:

答案 0 :(得分:4)

问题是你定义了一个没有长度的varchar变量。试试这个:

declare @slice VARCHAR(255) = '2013-06-04 13:42:41.647'
SELECT REPLACE(CONVERT(VARCHAR(255), CAST(@slice AS DATETIME), 109), ' ', '-')

请注意,declare才真正需要长度。出于某种原因,SQL Server在声明中默认为varcharnvarchar,长度为1个字符,但convert()为30个字符。

如果你这样做,你可以清楚地看到会发生什么:

declare @slice VARCHAR = '2013-06-04 13:42:41.647';
select @slice; -- or print @slice, if you like