sqlserver 几种datatime的区别

本文介绍了SQL Server中几种DateTime类型的区别。smalldatetime占4位,精确到分钟,时间范围为1900.1.1 - 2079.6.6;datetime占8位,精确到毫秒,时间范围为1753.1.1 - 9999.12.31。还提及了datetime2、datetimeoffset的特点,以及不同类型对应的时间格式和赋值函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、sqlserver 几种datatime的区别

smalldatetime 占4位精确到分钟。时间从1900.1.1到2079.6.6
datetime占8位精确到毫秒。时间从1753.1.1到9999.12.31 

1.datetime2:精确到0.1微秒

datetimeoffset数据类型,加入了时区偏移量部分,时区偏移量表示为 [+|-] HH:MM。 HH 是范围从 00 到 14 的 2 位数,表示时区偏移量的小时数。 MM 是范围从 00 到 59 的 2 位数,表示时区偏移量的附加分钟数。 时间格式支持到最小 100 毫微秒。 必需的 + 或 - 符号指示在 UTC(通用协调时间或格林尼治标准时间)中是加上还是减去时区偏移量以获取本地时间。

2.DateTime、DateTime2、DateTimeOffset区别

 

DateTime

DateTime2

DateTimeOffset

日期范围

1753-01-01到 9999-12-31

0001-01-01 到 9999-12-31

0001-01-01 到 9999-12-31

时间范围

00:00:00 到 23:59:59.997

00:00:00 到 23:59:59.9999999

00:00:00 到 23:59:59.9999999

存储字节大小

8字节

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

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

精度

舍入到 .000、.003 或 .007 秒三个增量。

100 纳秒

100 纳秒

支持自定义小数精度

时区

-14:59 到 +14:59

博主注:smalldatetime sqlserver2008是精确到3%秒的,上述精确到min可能sqlserver版本不同。

3、补充说明

DateTime字段类型对应的时间格式是yyyy-MM-dd HH:mm:ss.fff,3个f,精确到1毫秒(ms),示例2014-12-0317:06:15.433。

DateTime2(7)字段类型对应的时间格式是yyyy-MM-dd HH:mm:ss.fffffff,7个f,精确到0.1微秒(μs),示例2014-12-0317:23:19.2880929。

如果用SQL的日期函数进行赋值,DateTime字段类型要用GETDATE(),DateTime2字段类型要用SYSDATETIME()。

参考:https://www.cnblogs.com/yanan7890/p/8950150.html

http://www.webym.net/jiaocheng/189.html

<think>根据用户输入的关键词"DATATIME",结合之前对话中涉及的WinCC日期时间控件和OnlineTable时间范围选择,判断用户可能关注WinCC中的日期时间处理(可能是拼写错误,应为DATETIME)。需要提供WinCC中日期时间数据类型的使用方法,包括在脚本、控件、归档等场景的应用。 由于用户问题简短,需扩展解释: - WinCC中日期时间的表示方式 - 常用日期时间函数 - 日期时间数据的存储和显示 - 与外部系统(如PLC)的交互 注意:必须包含代码示例,并按照规则在最后提出相关问题。</think>### WinCC DATETIME 数据类型全面解析 #### 一、DATETIME 基础操作 ```vbscript ' 获取当前系统时间 Dim nowTime nowTime = Now ' 返回当前日期时间 ' 创建指定时间 Dim specificTime specificTime = DateSerial(2023, 10, 15) + TimeSerial(14, 30, 0) ' 时间格式化输出 Dim formattedTime formattedTime = FormatDateTime(nowTime, vbGeneralDate) ' "2023-10-15 14:30:45" ``` #### 二、DATETIME 计算与转换 ```vbscript ' 时间加减计算 Dim nextDay, prevHour nextDay = DateAdd("d", 1, Now) ' 加1天 prevHour = DateAdd("h", -1, Now) ' 减1小时 ' 时间差计算 Dim diffMinutes diffMinutes = DateDiff("n", startTime, endTime) ' 计算分钟差 ' 时间分量提取 Dim yearPart, minutePart yearPart = Year(Now) ' 获取年份 minutePart = Minute(Now) ' 获取分钟 ``` #### 三、DATETIME 与 PLC 通信 ```vbscript ' 读取PLC时间并转换 Dim plcTime plcTime = GetTagDWord("PLC_TIME_TAG") ' 读取PLC的DWORD时间戳 ' 转换DWORD为WinCC时间 Dim winccTime winccTime = CDate(CDbl(plcTime) / 86400 + #1970-01-01#) ' UNIX时间戳转换 ' 写入时间到PLC Dim setTime setTime = DateAdd("h", 2, Now) ' 设置2小时后时间 SetTagDWord "PLC_SET_TIME", CLng((CDbl(setTime) - #1970-01-01#) * 86400) ``` #### 四、DATETIME 在归档中的应用 ```vbscript ' 查询历史数据 Dim startDT, endDT startDT = "2023-10-01 00:00:00" endDT = "2023-10-01 23:59:59" ' 创建归档查询 Set arQuery = CreateObject("ArQuery.AQuery") arQuery.StartTime = startDT arQuery.EndTime = endDT arQuery.QueryType = 0 ' 原始数据查询 ' 添加变量 arQuery.AddVariable "Tag1" arQuery.AddVariable "Tag2" ' 执行查询 arQuery.Execute ``` #### 五、DATETIME 格式参考表 | 格式代码 | 说明 | 示例 | |----------|------|------| | **yyyy** | 四位数年份 | 2023 | | **yy** | 两位数年份 | 23 | | **MM** | 两位数月份 | 10 | | **dd** | 两位数日期 | 05 | | **HH** | 24小时制小时 | 14 | | **hh** | 12小时制小时 | 02 | | **nn** | 分钟 | 30 | | **ss** | 秒钟 | 45 | | **tt** | AM/PM | PM | | **/或-** | 日期分隔符 | - 或 / | | **:** | 时间分隔符 | : | #### 六、高级应用技巧 ```vbscript ' 1. 时区转换 Function ConvertTimeZone(sourceTime, sourceZone, targetZone) Dim offset offset = (targetZone - sourceZone) / 24 ConvertTimeZone = DateAdd("h", offset, sourceTime) End Function ' 2. 工作时间计算 Function IsWorkingTime(checkTime) Dim hourPart, dayPart hourPart = Hour(checkTime) dayPart = Weekday(checkTime) ' 周一至周五 8:00-17:00 If dayPart >= 2 And dayPart <= 6 Then If hourPart >= 8 And hourPart < 17 Then IsWorkingTime = True Exit Function End If End If IsWorkingTime = False End Function ' 3. 夏令时自动调整 Function AdjustForDST(inTime) ' 简单夏令时规则(3月第二个周日到11月第一个周日) Dim startDST, endDST startDST = GetNthDay(3, 2, 1) ' 3月第二个周日 endDST = GetNthDay(11, 1, 1) ' 11月第一个周日 If inTime >= startDST And inTime < endDST Then AdjustForDST = DateAdd("h", 1, inTime) Else AdjustForDST = inTime End If End Function ``` #### 七、错误处理与调试 ```vbscript ' 安全时间转换函数 Function SafeCDate(timeStr) On Error Resume Next Dim result result = CDate(timeStr) If Err.Number <> 0 Then ' 记录错误日志 LogEvent "无效时间格式: " & timeStr, 2 ' 返回默认时间 SafeCDate = Now Err.Clear Else SafeCDate = result End If End Function ' 时间验证函数 Function IsValidDateTime(dtValue) If IsDate(dtValue) Then If Year(dtValue) >= 1980 And Year(dtValue) < 2100 Then IsValidDateTime = True Exit Function End If End If IsValidDateTime = False End Function ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值