回答

收藏

SQL不允许将日期列强制转换为datetime吗?

技术问答 技术问答 232 人阅读 | 0 人回复 | 2023-09-14

Select * from tableA inner join tableB on tableA.id = tableB.aid                   and cast(a.date AS DATETIME) = CAST('2015-08-24' AS DATETIME)存储在tableA.date其中值为 2015-08-24表示数据没有问题。9 T& x& g' H5 y8 d6 W' l) z
当我执行上述句子时,我会得到它- P, m/ j* v' E) j6 B7 Y
将日期数据类型转换为日期时间数据类型,导致超出范围的值
- P/ O& \1 ]6 v: b
我能知道为什么我不能把它扔给它date专栏datetime吗?
4 {3 M0 P! j( G                                                               
4 {. ~4 d" I2 o' B' v( v    解决方案:                                                               
2 c' O( @6 \3 l0 r2 D                                                                问题的 根本原因    是:8 ]% N% z' v2 _9 s+ X6 w3 C; i
数据类型DATE具有从01-01-一系列可接受值12001到-31-9999
" O6 F; I/ P7 ^; h数据类型DATETIME具有从01-01-1753到12系列可接受值-31-9999
所以,如果你碰巧有一个DATE1753前的值或空/ NULL值-这将超出DATETIME可以处理的范围。
& I/ V  U3 t8 I4 Y% @您应该 停止    DATETIME在SQL Server 20082 I. U; Y( U6 n  u  n) d$ J7 o" X
在更高的版本中使用。DATETIME2(n)代替(其中n代表所需的小数秒)。7 K1 \; N% d. m
因此,请尝试以下操作:
" a. c* w8 o' [' W. ~select * from tableA inner join tableB on tableA.id = tableB.aid                   and cast(a.date AS DATETIME2(3)) = CAST('2015-08-24' AS DATETIME2(3))我相信这会很好。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则