将Nvarchar(MAX)转换为DATETIME数据类型SQL Server查询

时间:2015-12-01 09:26:12

标签: sql sql-server datetime

我在将NVARCHAR(MAX)转换为DateTime数据类型时遇到问题。我检查了空值和空格。我不确定为什么它不能转换。是不是因为他们现在拥有数据的方式。如果有人能告诉我我必须改变它才能发挥作用。

DateStamp
------------------
2015-10-1413:09:17
2015-10-1413:09:17
2015-10-1413:09:19
2015-10-1413:09:22
2015-10-1413:09:23
2015-10-1413:09:27
2015-10-1413:09:27
您可以看到

DateStamp列。是否有必须放入的空间或者我还有其他需要改变的地方吗?

1 个答案:

答案 0 :(得分:2)

您的NVARCHAR(MAX)字符串缺少空格。例如,'2015-10-1413:09:17'应为'2015-10-14 13:09:17'

正如您所说,转换为DATETIME

时,这不起作用
DECLARE @date NVARCHAR(MAX) = '2015-10-1413:09:17'
BEGIN
    SELECT CAST(@date as datetime)
    SELECT CONVERT(datetime,@date)
END
  

从字符转换日期和/或时间时转换失败   字符串。

假设您总是以相同的格式获取此日期戳字符串,您可以使用SUBSTRING向字符串添加所需的空格,然后将其转换为DATETIME:

DECLARE @date NVARCHAR(MAX) = '2015-10-1413:09:17'
BEGIN
SELECT (SUBSTRING(@date,1,10)+' '+SUBSTRING(@date,11,15)) as FormattedDate -- 2015-10-14  13:09:17 
SELECT CONVERT(datetime,(SUBSTRING(@date,1,10)+' '+SUBSTRING(@date,11,15)))
END -- Returns : 2015-10-14 13:09:17.000