由SQL Server的数据导出时间转化问题引发的

本文讲述了在SQL Server中遇到的批处理修改时间字段的问题,通过导出脚本和正则替换的方式,发现导出的时间数据为16进制形式。作者深入研究了SQL Server的datetime存储机制,发现其基于1900年1月1日的天数和时间毫秒数。在探索过程中,发现了日期与16进制数值的关系,并讨论了可能存在的原因和未解之谜。
摘要由CSDN通过智能技术生成

问题描述

使用SQL Server 2012 附加一个数据库之后,想批修改数据中的时间,把时间日期提前,因为有很多表中有时间字段,在一个个表找,用sql更新,过于枯燥。想找一个一次性把所有表时时间都换成一样的方式。所以想到导出成sql脚本,然后用正则表达式查找替换,再重新建库。(当然情况是表比较多,但每个表中的数据量并不太多)

过程

先是参考SQLserver 2008将数据导出到Sql脚本文件的方法
发现只导出了表结构,未导出数据。
再找到了这篇SQL Server 2012 将数据导出为脚本详细图解 才搞定。
评价几句

  • 没有记住上次向导的配置,每次导都要再配置一次,不方便。
  • 高级配置里的选项那多么,却只分配那么小的框,要上下移,都做成向导页面了,就放一个高级配置的向导页就OK了嘛。
  • 默认配置不合理。

新问题

数据是导出来了。
但发现插入时间的语句是这样的INSERT [dbo].[test] ([dt]) VALUES (CAST(0x0000A44E00000000 AS DateTime))
CAST后面的长串16进制是什么鬼。
碰见反常的东西,是要好奇查查。
MSDN 里 CAST 和 CONVERT (Transact-SQL),按图索冀 表达式(Transact-SQL) 然后就呵呵,断了。

  • 查msdn时,总有这样的感觉,A页面说,详细请见B页面,然后B页面就是与A页面没太大联系的说明。
  • 为什么要设计成这样,非要再转一次才能看到真的时间?

继续摸

如果时间紧,就不用在这里再探索那16个字符与时间的对应关系了。建个临时表,再导出需要调整的时间,再用导出的那个16进制数,替换那所有的数据就可以了。重放攻击的原理?

我想了解那个与时间的对应关系,先g

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值