sql语句高手帮个忙吧,是关于时间的sql语句,谢谢

xiumu 2004-03-25 01:25:54
我有一个sql表,其中有个datetime类型字段,
我本意希望他是纯time字段,但我不知道怎么做,或是能不能做到,就将就着用
datetime类型了
我的sql语句如下
insert into mytable (puretime) values ('12:13:13')
执行该语句后,字段里多出的内容是
"1900-1-1 12:13:13"
但是,我如果直接用sql客户端工具,在表格里填写"12:12:12",是能够以不带
年月日存储的,我要的是后者的效果,我想可能是我的sql语句有问题。

希望高手能帮我解决这个问题。

当然,还有其他折衷的方法,比如使用字符串类型,或干脆,就让多出来的日期数据留
在那里也可以。但我不希望这样,我只想搞明白,为什么sql客户端做到了,而我的
sql语句缺做不到。

谢谢了



...全文
68 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiumu 2004-03-25
  • 打赏
  • 举报
回复
ok,谢谢各位高手。我刚才也做了测试,大致得出这样的结果,纯属个人猜测。
当使用sql语句填写datetime类型的字段时,若只给出时间,sql语句解释器(分析sql语句的模块,我也不知道怎么称呼它)会自动加上默认时间1900-1-1。
当使用sql客户端的表格工具填写datetime类型的字段时,若只给出时间,该表格工具,会在生成
sql语句前,写进行类型检查,当发现datetime类型字段只有时间,没有日期时,就
加上sql客户端使用的默认时间1899-12-30(为什么不是31,不知道微软怎么想的),然后再
更新数据库,而sql语句解释器,发现正常datetime填写方式,也就不会去加它的1900-1-1默认时间了。

在使用sql客户端填写datetime字段时,若是只写时间,则使用1899-12-30进行日期默认存储,并且不在界面上反映出来,反之,若填写1899-12-30作为日期信息,则该段信息会在表格上消失
,因为按照1899-12-30这样的默认日期时不需要现实的。

说了这么多,纯属个人见解,贻笑大方了,呵呵。
Rotaxe 2004-03-25
  • 打赏
  • 举报
回复
楼上说的都对。
如果直接用sql客户端工具,在表格里填写"12:12:12"并不是不带
年月日存储,你用CONVERT(varchar(20), 字段名, 120)看一下,实际是
1899-12-30 12:12:12.
leeboyan 2004-03-25
  • 打赏
  • 举报
回复
表里保存的都是2004-01-01 00:00:00的形式,你select 出来该字段时,可以用convert转换出你需要的格式!
123456xjy 2004-03-25
  • 打赏
  • 举报
回复
这个问题还没有解决过,关注中
ccmoon 2004-03-25
  • 打赏
  • 举报
回复

convert(varchar(8),puretime,108)
caiyunxia 2004-03-25
  • 打赏
  • 举报
回复
没有
用VARCHAR或char
ccmoon 2004-03-25
  • 打赏
  • 举报
回复
你的字段肯定要包括日期和时间的
你不输入日期的情况下,默认就是1900-1-1

你用SELECT出来的时候只显示时间旧可以了
SELECT CAST(DATAPART(hh,puretime) AS VARCHAR(2)) +
':' +
CAST(DATAPART(MM,puretime) AS VARCHAR(2)) +
':' +
CAST(DATAPART(SS,puretime) AS VARCHAR(2)) +
zheninchangjiang 2004-03-25
  • 打赏
  • 举报
回复
没有直接的时间类型,客户端只是暂时的,保存时还会是年月日的
zjcxc 2004-03-25
  • 打赏
  • 举报
回复
sql中没有纯的time类型

所以你要么用datetime字段,在取数据的时候,用 convert(varchar,time字段,112) 得到时间部分

要么改用字符型字段来存储.

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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