回答

收藏

Access和SQL Server计算日期的方法不同

技术问答 技术问答 97 人阅读 | 0 人回复 | 2023-09-13

除此之外,我们还有一些可以保存和显示日期的通用工具。它将另存数字,如41247。
0 w5 y" j5 c0 V1 T' J假如我把它转换回来Access2012/12/04中期日期-是正确的。
: |$ t1 E2 ]9 W& Q6 {5 N- p[使用Format(41247)Format(Format 41247Short Date”),“ Short Date”)]5 v# o4 }7 h1 F% ^( Z1 F
如果我把这个数字转换回来SQL* t( H6 w( e4 x; U( Z+ u
Server2012/12/06年中期日期-不正确。我在用CONVERT(datetime,CONVERT(real,41247))0 G: S5 {5 q& V) [  B9 r2 t
为什么会有区别?SQL用什么来解决它?; I: E, ?0 G% ?8 e
                                                                ) T' F$ X' m# }+ |# [! t0 n7 ~
    解决方案:                                                               
; q9 |( P. F+ {& Z& |                                                                所以,当我从excel这个问题是文件导入数据时遇到的。4 x+ G7 V3 M, B
两天的差异有两个原因7 A9 p! R# M0 |/ z
原因1在您的SQL Server1900年1月1日是中国Day 0,在访问中Day 1。6 g& `1 ?! _. c2 j
(我没用Access,但如果你在Excel中输入日期1900-01-将单元格式设置为数字,01将得到1)。9 I7 N& Z% D4 \. ]
2 1900年0年不是a年。SQL Server知道它,但Access不知道。它认为存在于1900年2月29日。
3 h- Y* L4 O8 s- {" h. B在您的SQL Server中运行
4 f7 `3 Z: v0 q* g8 X) u0 I5 B1 bSELECT DATEDIFF(dd,0,'1900-01-01')SELECT DATEDIFF(dd,0,'1900-02-28')SELECT DATEDIFF(dd,0,'1900-03-01')输出将是" K- ]2 u  D$ z6 u+ V5 U: S
058 59但是当你试着跑步的时候; H2 e! A4 T  D; O1 r7 u
SELECT DATEDIFF(dd,0,'1900-02-29')你会犯错误的, j' f9 \3 w" b: A, d7 J
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.由于上述两个原因,您的访问时间将增加2天。# A0 U! K& G; N7 s+ t+ S. r
因此,对于2012/12/04,Access返回41247,而SQL Server将给您41245。
) |, r# ^, w7 L. f8 L$ T: v) t希望能有所帮助。
5 B# [3 S; ~% A  G) c& t编辑6 h0 ^' C- a! v0 ^: x* w
看看Eric Lippert他提到了他的评论Joel Spolsky两篇非常有趣的博客文章。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则