我有一个存储为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
字符。有什么建议么??
我有一个存储为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
字符。有什么建议么??
您可以用空格replace
斜线:
CAST(REPLACE(CONVERT(char(8),DateField,112),'/','') as int)
首先,你应该把它转换为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
我认为你需要转换的链条:字符串 - >日期时间 - >字符串 - > INT
cast(convert(char(8), convert(datetime, DateField, 101), 112) as int)
你也许可以依靠沿链隐式转换,但我更喜欢明确。
你为什么要存储日期为'NVARCHAR (MAX)'?请将它们存储为适当的数据类型...这不仅仅是存储数据的大量开销,但它在尝试查询数据时会导致很多复杂情况。这就是说......你究竟期待这种“INT”表示是......? – Siyual
@Siyual:'CONVERT(INT,getdate())'返回自1900-01-01以来的天数。 –
@RossPresser是的,但这并不意味着OP希望他的日期“INT”表示是那个。他可能想要“20160407”或“472016”或EPOCH时间,甚至是上一部“星球大战”电影以来的分钟数。它完全没有定义... – Siyual