字符串到日期时间转换失败

时间:2015-04-22 22:52:19

标签: sql-server

我必须计算几个日期之间的时间,但这个字段不是日期类型,这个字段是varchar,所以我必须转换它们。 例如,我有这个值:

CODIGO  SUMILLA_HDR1        SUMILLA_HDR2
N050044 07/01/2015 10:58    09/01/2015 12:32:36
N050044 07/01/2015 10:58    09/01/2015 11:58:10

如果我用句子转换值:

SELECT CONVERT(char(8), CAST('07/01/2015 10:58:38' AS DATE),112) 

我有:20150701 =>这对我来说没问题。

但如果我尝试下一个:

SELECT CONVERT(char(8), CAST(SUMILLA_HDR1 AS DATE),112) 
FROM FLUJO_CS
WHERE CODIGO = 'N050044'

我有错误:

  

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

我不知道为什么会这样,价值观是一样的,有人可以帮我吗? 我们将不胜感激。

3 个答案:

答案 0 :(得分:0)

我认为你的行数据已损坏。值不一样。在表中你有时间没有秒。试试这个:

SELECT CONVERT(char(8), CAST(SUMILLA_HDR1 + ':00' AS DATE),112) 
FROM FLUJO_CS
WHERE CODIGO = 'N050044

'

答案 1 :(得分:0)

您应首先转换日期:

SELECT CAST(CONVERT(char(50), '07/01/2015 10:58:38',112) AS DATE)

将日期转换为字符串(不转换)可能会导致不同的日期格式,具体取决于用户的语言设置。

答案 2 :(得分:0)

我用这个转换了价值:

CONVERT(DATE,CONVERT(NVARCHAR(10), SUMILLA_HDR1),103)

例如,如果我想要从某个日期开始的数字天数,我就有这个:

SELECT CONVERT(NVARCHAR(10), SUMILLA_HDR1),      CONVERT(DATE,CONVERT(NVARCHAR(10), SUMILLA_HDR1),103),
DATEDIFF(DAY, GETDATE(), CONVERT(DATE,CONVERT(NVARCHAR(10),      SUMILLA_HDR1),103)) 
FROM FLUJO_CS
WHERE CODIGO = 'N050044'  
AND SUMILLA_HDR1 IS NOT NULL

谢谢!! 最好的问候