ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sql timestamp 的应用

2020-03-25 18:01:59  阅读:300  来源: 互联网

标签:十六进制 timespan timestamp 数据库 应用 sql 类型 byte


timestamp 通常用作给表行加版本戳的机制。

timestamp 公开数据库中自动生成的唯一二进制数字的数据类型。

存储大小为 8 个字节。 timestamp 数据类型只是递增的数字,不保留日期或时间。

每个数据库都有一个计数器,当对数据库中包含 timestamp 列的表执行插入或更新操作时,该计数器值就会增加。

该计数器是数据库时间戳。 这可以跟踪数据库内的相对时间,而不是时钟相关联的实际时间。

一个表只能有一个 timestamp 列, 每次修改或插入包含 timestamp 列的行时,就会在 timestamp 列中插入增量数据库时间戳值。

由于timestamp在SQL SERVER 2005数据库中,不可为空的timestamp类型在语义上等同于binary(8)类型,可为空的 timestamp类型在语义上等同于varbinary(8)类型,这将导致在C#程序中获取到的timestamp类型则变成了byte[]类型。所以如果我们需要从数据库中获取并使用这个时间戳的话就必需经过转换。

在程序中我们发现,通过ADO.NET获取数据库中timestamp字段值到程序中,结果类型为byte[]。假设在数据库中timestamp的值为0x00000000000007D6,那么获取到.net程序中的值就不是这样了,一把来说会变成byte[]的数组类型。

方法一(在SQL中转换):

SELECT TS
,CAST(TS AS VARBINARY(8)) AS 'timestamp转十六进制字符串' 
,CONVERT(BIGINT,TS) AS 'timestamp转bigint类型'
FROM tb_Ts

方法二(在程序中转换,调用下面的方法即可):

/// <summary>
/// 将数据库中timespan转换成十六进制字符串
/// </summary>
/// <param name="objTs">从数据库中获取的timespan值</param>      
/// <returns>timespan十六进制字符串</returns>
public  string ConvertToTimeSpanString(object objTs)
{
byte[] btTsArray=objTs as byte[];
string strTimeSpan = "0x"+ BitConverter.ToString(btTsArray).Replace("-","");
return strTimeSpan;
}

 

标签:十六进制,timespan,timestamp,数据库,应用,sql,类型,byte
来源: https://www.cnblogs.com/su-king/p/12567742.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有