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))我相信这会很好。 |
|
|
|
|
|