如果我有一个长值20130901
,我该如何将其转换为smalldatetime
:
2013-09-01 00:00:00
答案 0 :(得分:1)
SELECT CONVERT(SMALLDATETIME, CONVERT(CHAR(8), 20130901));
或者只是作为DATETIME
(如果您需要,可以隐式或显式转换为SMALLDATETIME
):
SELECT DATEADD(DAY, 0, CONVERT(CHAR(8), 20130901));
但是,为什么不DATE
?如果时间总是0(午夜),为什么还要使用SMALLDATETIME
或DATETIME
来承担时间?
另外,为什么你要存储/传递这个?是什么阻止某人向您发送20130231
或99999999
或70000099
或甚至是8位数以外的数字?出于某种原因,我们有与日期相关的数据类型 - 因此我们不会像使用longs那样做日期,这不仅会丢失此验证but also a whole host of other functionality。
答案 1 :(得分:0)
请尝试以下操作。
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(8), 20130901), 112)