关于SQLSERVER中的时间戳的问题

selectconvert(bigint,0x00000000E67E1518)aselectconvert(timestamp,3867022616)bselectco... select convert(bigint, 0x00000000E67E1518) a
select convert(timestamp,3867022616) b
select convert(timestamp, convert(bigint, 0x00000000E67E1518)) c

1.为什么b!=c?
2.利用sqlserver中的convert函数进行,时间戳的二进制与其他数据类型(比如bigint、int)之间是如何转化的,convert函数如何将两种不同数据类型之间的值对应起来?
3.如何利用时间戳同步不同数据库某表之间的数据?
展开
 我来答
SDMG123
2018-08-20 · TA获得超过6179个赞
知道大有可为答主
回答量:6676
采纳率:80%
帮助的人:705万
展开全部
很简单,因为 b的类型不是bigint 而是numeric(10,0) 也就是说,convert(timestamp,3867022616) =convert(timestamp,convert(numeric(10,0),3867022616))
sql server 规则无论你INT有多长,不超过38位,只要超过int的长度就会变成numeric。所以不会变成bigint,而timestamp是根据类型来的。不同数据类型就算值一样,转换成的时间戳就不一样,如果你想规避这个问题,你b就要改成select convert(timestamp,convert(bigint,3867022616)) b
更多追问追答
追问
有没有根据数据库某表里面的时间戳进行不同数据库之间某表数据同步更新(增删改)的经验,分享一下具体的做法。
追答
你要实现同步还是读写分离?
wendua
2018-08-18 · TA获得超过307个赞
知道小有建树答主
回答量:417
采纳率:75%
帮助的人:148万
展开全部
回答第一个问题,因为数字默认不是bigint类型的,如果你加上convert(bigint,3867022616)就一样了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式