0

我正在尝试这样做

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

但我得到错误

消息 241,级别 16,状态 1,第 2 行
从字符串转换日期和/或时间时转换失败。

如果我做

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

我得到的输出是 2

我哪里错了?

4

1 回答 1

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 在声明中默认 avarcharnvarchar没有长度为 1 个字符,但在convert().

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

declare @slice VARCHAR = '2013-06-04 13:42:41.647';
select @slice; -- or print @slice, if you like
于 2013-06-04T18:09:43.897 回答