我正在尝试这样做
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
我哪里错了?
答案 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在声明中默认为varchar
和nvarchar
,长度为1个字符,但convert()
为30个字符。
如果你这样做,你可以清楚地看到会发生什么:
declare @slice VARCHAR = '2013-06-04 13:42:41.647';
select @slice; -- or print @slice, if you like