MS SQL : 将日期时间转换为符合 Web 标准的 TIME 格式

MS SQL : Convert datetime to web standards complient TIME format

根据网络规范的时间输入字段的官方格式。

W3 似乎表明接受的格式是:

23:20:50.52
17:39:57

http://www.w3.org/TR/html-markup/input.time.html


问题

  1. 时间输入字段应该完全填充秒和毫秒还是 00:00 可以接受?

  1. 来自 MS SQL 是 ISO8601 CONVERT 126 正确的格式或者是 SQL CONVERT 108 hh:mm:ss 可以接受吗?

    CONVERT(VARCHAR(10),[MyDate]),108) AS [MyDate]

Click for list of SQL CONVERT() Functions


  1. 使用 convert 126 从 MSSQL 日期时间字段中提取格式正确的时间字段的适当方法是什么?

文档明确说明了可接受的时间值格式:

Value: A valid partial-time as defined in [RFC 3339].

relevant part of RFC 3339的定义如下:

time-hour       = 2DIGIT  ; 00-23
time-minute     = 2DIGIT  ; 00-59
time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap second
                          ; rules
time-secfrac    = "." 1*DIGIT

partial-time    = time-hour ":" time-minute ":" time-second
                  [time-secfrac]

这意味着 partial-time 由小时(2 位数字,24 小时制)、冒号 (:)、分钟 ( 2 位数字),后跟另一个冒号,然后是秒,然后 可选地 后跟小数部分(小数点后跟 1 位或多位数字)。

因此,秒是强制性的,但小数部分是可选的,这意味着 00:00 不是 RFC 3339 定义的有效 partial-time,但是00:00:00 很好,00:00:00.000:00:00.00000:00:00.0000 和其他变体也是如此。

至于CONVERT函数,108风格符合规范,如果不需要毫秒(或者纳秒什么的),用它就可以了。如果你想要毫秒,你可以使用样式 114 并将最后一个 : 替换为 . 或者你可以使用样式 121 或 126 并仅提取时间部分。如何提取?好吧,CONVERT 会给你一个字符串,所以只要用正确的参数将 SUBSTRING 应用到它。