2016-04-07 105 views
0

我有一个存储为nvarchar(max)的SQL日期字段。试图将存储为日期时间的nvarchar转换为int

例子:4/7/2016 12:50:03 AM

我需要将其转换为int

我有这样的:cast(convert(char(8), DateField,112) as int)

,但我得到一个错误信息将varchar值 '5/22/201' 转换为数据类型为int时

转换失败

显然,/不是int字符。有什么建议么??

+2

你为什么要存储日期为'NVARCHAR (MAX)'?请将它们存储为适当的数据类型...这不仅仅是存储数据的大量开销,但它在尝试查询数据时会导致很多复杂情况。这就是说......你究竟期待这种“INT”表示是......? – Siyual

+0

@Siyual:'CONVERT(INT,getdate())'返回自1900-01-01以来的天数。 –

+0

@RossPresser是的,但这并不意味着OP希望他的日期“INT”表示是那个。他可能想要“20160407”或“472016”或EPOCH时间,甚至是上一部“星球大战”电影以来的分钟数。它完全没有定义... – Siyual

回答

1

我相信,如果你投的VARCHAR到一个日期,将工作 铸造(转换(字符(8),演员(的DateField为日期时间),112)为INT)

+0

是的。这正是我所需要的。谢谢!! – bteague

0

您可以用空格replace斜线:

CAST(REPLACE(CONVERT(char(8),DateField,112),'/','') as int) 
0

首先,你应该把它转换为DATETIME,然后再转换到INT。不要指望日期部分是特定的长度 - 取决于月份的月份和月份,长度可能是8到10个字符。

DECLARE @T TABLE (datefield VARCHAR(MAX)) 
INSERT @T VALUES ('4/7/2016 12:50:03 AM') 
SELECT CAST(CONVERT(DATETIME, DateField) AS INT) FROM @T 
0

我认为你需要转换的链条:字符串 - >日期时间 - >字符串 - > INT

cast(convert(char(8), convert(datetime, DateField, 101), 112) as int) 

你也许可以依靠沿链隐式转换,但我更喜欢明确。

相关问题