Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql varchar到datatime的转换_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql varchar到datatime的转换

Sql varchar到datatime的转换,sql,sql-server,sql-server-2008,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), ' ', '-') 但我有一个错误 味精241,第16级,状态1,第2行 从字符串转换日期和/或时间时,转换失败 如果我这样做 declare @slice3 VARCHAR = '2013-06-04 13:42:41.647' SELECT

我正在努力做到这一点

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


我哪里出错了?

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

declare @slice VARCHAR(255) = '2013-06-04 13:42:41.647'
SELECT REPLACE(CONVERT(VARCHAR(255), CAST(@slice AS DATETIME), 109), ' ', '-')
请注意,只有
声明
才真正需要长度。出于某种原因,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

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

declare @slice VARCHAR(255) = '2013-06-04 13:42:41.647'
SELECT REPLACE(CONVERT(VARCHAR(255), CAST(@slice AS DATETIME), 109), ' ', '-')
请注意,只有
声明
才真正需要长度。出于某种原因,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

非常感谢。真的,我没有注意到,谢谢。真的,我没有注意到