时间中的毫秒(ms).微秒(us).纳秒(ns)

风之影子 2010-09-13 02:15:36
MSSQL是否只支持到毫秒呢?

什么数据库管理系统可以到纳秒或是皮秒呢?
...全文
821 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
东那个升 2010-09-13
  • 打赏
  • 举报
回复
2008都到纳秒了
昵称被占用了 2010-09-13
  • 打赏
  • 举报
回复
精确度
100 纳秒
昵称被占用了 2010-09-13
  • 打赏
  • 举报
回复
原来2008已经有了,只是我们得不到这么高精度的数据,看以下帮助


datetime2 (Transact-SQL) 发送反馈
请参阅
全部折叠全部展开 语言筛选器: 全部语言筛选器: 多个语言筛选器: Visual Basic语言筛选器: C#语言筛选器: C++语言筛选器: J#语言筛选器: JScript

Visual Basic(Declaration)
C#
C++
J#
JScript

定义结合了 24 小时制时间的日期。可将 datetime2 视作现有 datetime 类型的扩展,其数据范围更大,默认的小数精度更高,并具有可选的用户定义的精度。

有关所有 Transact-SQL 日期和时间数据类型及函数的概述,请参阅日期和时间数据类型及函数 (Transact-SQL)。有关日期和时间数据类型及函数共有的信息和示例,请参阅使用日期和时间数据。

datetime2 说明
属性 值
语法
datetime2 [ (fractional seconds precision) ]

用法
DECLARE @MyDatetime2 datetime2(7)

CREATE TABLE Table1 ( Column1 datetime2(7) )

默认的字符串文字格式

(用于下级客户端)
YYYY-MM-DD hh:mm:ss[.fractional seconds]

有关详细信息,请参阅使用日期和时间数据的“下级客户端的向后兼容性”部分。

日期范围
0001-01-01 到 9999-12-31

公元元年 1 月 1 日到公元 9999 年 12 月 31 日

时间范围
00:00:00 到 23:59:59.9999999

时区偏移量范围


各元素的范围
YYYY 是一个四位数,范围从 0001 到 9999,表示年份。

MM 是一个两位数,范围从 01 到 12,它表示指定年份中的月份。

DD 是一个两位数,范围为 01 到 31(具体取决于月份),它表示指定月份中的某一天。

hh 是一个两位数,范围从 00 到 23,它表示小时。

mm 是一个两位数,范围从 00 到 59,它表示分钟。

ss 是一个两位数,范围从 00 到 59,它表示秒钟。

n* 代表 0 到 7 位数字,范围从 0 到 9999999,它表示秒小数部分。

字符长度
最低 19 位 (YYYY-MM-DD hh:mm:ss ),最高 27 位 (YYYY-MM-DD hh:mm:ss.0000000)

精度、小数位数
0 至 7 位,准确度为 100ns。默认精度为 7 位数。

存储大小
精度小于 3 时为 6 个字节;精度为 4 和 5 时为 7 个字节。所有其他精度则需要 8 个字节。

精确度
100 纳秒

默认值
1900-01-01 00:00:00

日历
公历

用户定义的秒的小数部分精度


时区偏移量感知和保留


夏时制感知



有关数据类型元数据,请参阅 sys.systypes (Transact-SQL) 或 TYPEPROPERTY (Transact-SQL)。某些日期和时间数据类型的精度和小数位数是可变的。若要获取列的精度和小数位数,请参阅 COLUMNPROPERTY (Transact-SQL)、COL_LENGTH (Transact-SQL) 或 sys.columns (Transact-SQL)。

datetime2 支持的字符串文字格式
以下各表列出了适用于 datetime2 的支持的 ISO 8601 和 ODBC 字符串文字格式。有关 datetime2 日期和时间部分的字母、数字、未分隔和时间格式的信息,请参阅日期 (Transact-SQL)和time (Transact-SQL)。

ISO 8601 说明
YYYY-MM-DDThh:mm:ss[.nnnnnnn]

YYYY-MM-DDThh:mm:ss[.nnnnnnn]
此格式不受 SET LANGUAGE 和 SET DATEFORMAT 会话区域设置的影响。T、冒号 (:) 和句点 (.) 包括在字符串文字之内,如“2007-05-02T19:58:47.1234567”。


ODBC 说明
{ ts 'yyyy-mm-dd hh:mm:ss[.fractional seconds]' }
特定于 ODBC API:

小数点右侧的数字表示秒小数部分,可指定 0 到 7 位(100 纳秒)。


在 SQL Server 2008 中,当兼容级别设置为 10 时,文字将在内部映射到新的 time 类型。




对 ANSI 和 ISO 8601 的遵从性
datetime2 符合日期和时间的 ANSI 和 ISO 8601 标准。

示例
下例比较了将一个字符串转换为各种 date 和 time 数据类型的结果。

复制代码
SELECT
CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time'
,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date'
,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS
'smalldatetime'
,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime'
,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS
'datetime2'
,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS
'datetimeoffset';


下面是结果集:

数据类型 输出
time
12:35:29. 1234567

date
2007-05-08

smalldatetime
2007-05-08 12:35:00

datetime
2007-05-08 12:35:29.123

datetime2
2007-05-08 12:35:29. 1234567

datetimeoffset
2007-05-08 12:35:29.1234567 +12:15


请参阅
参考
CAST 和 CONVERT (Transact-SQL)

其他资源
在复制拓扑中使用 SQL Server 的多个版本


帮助和信息
获取 SQL Server 2008 帮助 文档反馈
Microsoft 非常重视您的反馈。 若要对此主题进行评级并将有关此主题的反馈发送至文档小组,请单击一个等级,然后单击“发送反馈”。 有关支持问题的帮助信息,请参阅产品附带的技术支持信息。
较差 1
2
3
4
5
非常好
若要将您的反馈通过电子邮件发送至 Microsoft,请单击此处:
© 2008 Microsoft Corporation。保留所有权利。


昵称被占用了 2010-09-13
  • 打赏
  • 举报
回复
分成两个字段,一个datetime记录到秒的时间,秒以下的用另一个bigint记录,单位是你需要的最小的单位,bigint应该足够了
hao1hao2hao3 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 libinguest 的回复:]
引用 10 楼 feg545 的回复:
一般不需要那么高的精度吧?3毫秒已经很恐怖了。
有什么程序上需要的话,建议加3位随机数就差不多了。



谢谢,再等等
[/Quote]

看看这个不错
http://topic.csdn.net/u/20080614/15/fba36da5-a1cb-4e6c-b779-0da23639236e.html
风之影子 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 feg545 的回复:]
一般不需要那么高的精度吧?3毫秒已经很恐怖了。
有什么程序上需要的话,建议加3位随机数就差不多了。
[/Quote]


谢谢,再等等
qq574444572 2010-09-13
  • 打赏
  • 举报
回复
坐等神人 。。。
福来哥 2010-09-13
  • 打赏
  • 举报
回复
一般不需要那么高的精度吧?3毫秒已经很恐怖了。
有什么程序上需要的话,建议加3位随机数就差不多了。
billpu 2010-09-13
  • 打赏
  • 举报
回复
我记得是3/1000秒 精度 也就是大约3毫秒
其实能获取的最小粒度和操作系统也有关系
比如nt4.0以前的版本最小支持到10毫秒
当然你如果可以直接获取cpu的指令周期那样可以获得纳秒级的时间
ws_hgo 2010-09-13
  • 打赏
  • 举报
回复
前台程序保存的时候取出纳秒级

保存到数据库字段用字符串类型
ws_hgo 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 libinguest 的回复:]
引用 3 楼 wxf163 的回复:
不支持 想其他替代办法



确定?
[/Quote]

05的最小精度是33毫秒,但事实上,即便是数据库可以存储1ms精度,客户端程序也比较困难。

如果你sql2000需要保存1ms可以不用datetime,用其他数据类型,比如varchar就可以了。
风之影子 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 haiwer 的回复:]
能支持毫秒,但是计算机的时钟好面已经不是很准确,大部分只能精确到3毫秒
可能你更换好点的CPU能支持毫秒,其他的就没办法了
[/Quote]


如何可以让我进行纳秒级数据的存储。给个方案(提升硬件或是其它的方法)。
风之影子 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wxf163 的回复:]
不支持 想其他替代办法
[/Quote]


确定?
ws_hgo 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 haiwer 的回复:]
能支持毫秒,但是计算机的时钟好面已经不是很准确,大部分只能精确到3毫秒
可能你更换好点的CPU能支持毫秒,其他的就没办法了
[/Quote]
UP
王向飞 2010-09-13
  • 打赏
  • 举报
回复
不支持 想其他替代办法
昵称被占用了 2010-09-13
  • 打赏
  • 举报
回复
能支持毫秒,但是计算机的时钟好面已经不是很准确,大部分只能精确到3毫秒
可能你更换好点的CPU能支持毫秒,其他的就没办法了
csuxp2008 2010-09-13
  • 打赏
  • 举报
回复
这个要求好高...

22,209

社区成员

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

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