2015-04-22 55 views
0

我必须计算几个日期之间的时间,但这个字段不是日期类型,这个字段是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' 

我有错误:

Conversion failed when converting date and/or time from character string.

我不知道这是为什么,该值是相同的,任何人都可以帮我请?它将不胜感激。

+0

您使用的是什么sql-server版本?这在我的2008 R2版本中适用于我。另外你的语言设置是什么? –

+0

您可能在表 –

+0

中的数据不正确您的默认语言是什么?西班牙? – Jaco

回答

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 

谢谢!! 最好的问候

0

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

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

'

+0

谢谢乔治,这些都是相同的价值观,但似乎当我复制和粘贴他们,秒被ommited,但在数据库中是相同的值 –

0

你应该先转换日期:

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

铸造日期作为字符串(无转换)可导致不同的日期格式取决于用户的语言设置。

相关问题