导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

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

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,请问为什么?原理是什么?日期为什么一定要以字符串的形式?
...全文
27 点赞 收藏 7
写回复
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
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告