在sql server 2008中存储日期时间值时,使用日期时间类型,它将以什么格式存储值?
这是1970年以来的秒数吗?
在应用程序端(.net(,我正在传递一个datetime对象。
当我在查询分析器中查看表的行时,它会根据我的区域性设置对其进行格式化吗?还是我正在查看数据库中存储的内容?
在内部,根据SQLDenis,它们被存储为两个整数
http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/how-are-dates-stored-in-sql-server
当您在查询分析器中查看它们时,您看到的是经过评估的数字。
它不是存储为"unix时间">
http://en.wikipedia.org/wiki/Unix_time
它以浮点形式存储,表示自1900年1月1日以来的天数。如果你把它四舍五入为int,那么只剩下日期部分:
select cast(cast(getdate() as int) as datetime)
-->
2011-07-12 00:00:00.000
或者,如果你给它加上一个数字,那就是增加天数。例如,加0.5相当于加12小时:
select getdate() + 0.5
-->
2011-07-12 11:22:09.927
有关详细信息,请参阅MSDN的这篇文章。
日期时间不包括格式信息;查询分析器可以按自己喜欢的任何方式显示它。它可能会尝试尊重您的客户端电脑的区域设置。
以下是查看其存储方式的代码:
DECLARE @now datetime, @bytenow binary(8)
SELECT @now = getdate()
SELECT @bytenow = convert(binary(8), @now)
SELECT @now AS fulldate, @bytenow AS internal,
convert(int, substring(@bytenow, 1, 4)) AS days,
convert(int, substring(@bytenow, 5, 8)) AS ticks
这显示了两个值:
- 前4个字节是表示自1900年1月1日起的天数
- 第二个4字节是自午夜以来的刻度数,其中一秒有300个刻度
fulldate internal days ticks
----------------------- ------------------ ----------- -----------
2016-11-07 10:54:13.080 0x0000A6B700B3AFB4 42679 11775924
参考:解决日期时间之谜参见图3
DateTime doj = new DateTime();
System.Globalization.CultureInfo c1=new System.Globalization.CultureInfo("en-GB",true);
doj = DateTime.Parse(Txtdoj.Text.Trim(), c1, System.Globalization.DateTimeStyles.NoCurrentDateDefault);
使用..it
使用查询显示日期时间从tbl_registration 中选择convert(varchar(max(,doj,103(作为doj