数据库插入语句?关于日期的

hjh530 2003-12-25 01:11:46
我的插入语句为:insert into lsb values(2003-12-25,1),其中2003-12-25 为日期型。此时在数据库中的日期为:1905-05-21。
假如改为:insert into lsb values('2003-12-25',1),在数据库中日期才为:2003-12-25,请问为什么?原理是什么?日期为什么一定要以字符串的形式?
...全文
65 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gmlxf 2003-12-25
  • 打赏
  • 举报
回复
select 2003-12-25
/*

-----------
1966

(所影响的行数为 1 行)
*/

你要明白这个是数学运算,不是说日期'2003-12-25'='1966'
hjh530 2003-12-25
  • 打赏
  • 举报
回复
2003-12-25 = 1966?
gmlxf 2003-12-25
  • 打赏
  • 举报
回复
datetime类型系统里面是共用8个字节来存储的,存储的数字类型。

其中前4个字节用来存储日期1900-1-1之前/后的天数,
其中后4个字节用来存储00:00后的毫秒数。

如果是''就是1900-1-1了
select cast('' as datetime)

而 2003-12-25=1966
所以
select cast('' + 1966 as datetime)
就是1900-1-1 + 1966 天 = 1905-05-21


jingxijun 2003-12-25
  • 打赏
  • 举报
回复
select 2003-12-25-(2003-12-25)/365*365-30*4
结果为:21

上面只是粗算
把2003-12-25=1966
换算成天数,以1900-01-01为基数,加上1966天,大约等于1905-05-21这一天


caiyunxia 2003-12-25
  • 打赏
  • 举报
回复
日期必须用''才能表示,如果不用'',系统部认识,会自动转换为数据库的初始时间'1905-05-21'
daveeyang 2003-12-25
  • 打赏
  • 举报
回复
呵呵,执行sql的时候,任何值都是以字符串的类型,在sql里面插入值都用''把值标记起来。同样你在一个varchar类型中插入一个值,也得用''把插入值标记起来。
txlicenhe 2003-12-25
  • 打赏
  • 举报
回复
2003-12-25 = 1966
相当于'1900-01-01' + 1966

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧