文章目录

  • 第147章 SQL函数 TO_TIMESTAMP
  • 大纲
  • 参数
  • 描述
  • 相关 SQL 函数
  • 日期和时间字符串
  • 格式化
  • 格式元素
    • 两位数年份转换(`RR `和 `RRRR` 格式)
    • 一年中的某一天(DDD 格式)
    • 第一年之前的日期
    • 12 小时制时间
  • 示例

第147章 SQL函数 TO_TIMESTAMP

将格式化字符串转换为时间戳的日期函数。

大纲

TO_TIMESTAMP(date_string[,format])

参数

  • date_string - 要转换为时间戳的字符串表达式。此表达式可能包含日期值、时间值或日期和时间值。
  • format - 可选 — 对应于 date_string 的日期和时间格式字符串。如果省略,则默认为 DD MON YYYY HH:MI:SS

描述

TO_TIMESTAMP 函数将各种格式的日期和时间字符串转换为标准时间戳,数据类型为 TIMESTAMPTO_TIMESTAMP 返回具有以下格式的时间戳:

yyyy-mm-dd hh:mm:ss

始终包括前导零。时间使用 24 小时制指定。默认情况下,返回的时间戳不包括小数秒。

注意:TO_TIMESTAMPODBC 格式返回标准时间戳。 TO_POSIXTIME 返回一个编码的 64 位时间戳。 TO_POSIXTIME 是新编程的推荐时间戳格式。

必须指定匹配的 date_string 和格式。如果省略格式,则 date_string 必须匹配 DD MON YYYY HH:MI:SS

如果 date_string 省略了时间戳的组成部分,则 TO_TIMESTAMP 提供缺少的组成部分。如果 date_stringformat 都省略了年份,则 yyyy 默认为当前年份;如果只有 date_string 省略了年份,则默认为 00,根据年份格式元素扩展为四位数年份。如果省略日或月值,则 dd 默认为 01mm-dd 默认为 01-01。因此,如果 date_stringformat 都省略了时间戳的日期部分,则 TO_TIMESTAMP 默认为当年的 1 月 1 日,采用 ODBC 格式:yyyy-01-01

缺少的时间组件默认为 00。支持小数秒,但必须明确指定;默认情况下不提供小数秒。

TO_TIMESTAMP 支持将两位数年份转换为四位数。 TO_TIMESTAMP 支持将 12 小时制时间转换为 24 小时制时间。它提供日期和时间元素值的范围验证,包括闰年验证。范围验证违规会生成 SQLCODE -400 错误。

也可以使用 TOTIMESTAMP() 方法调用从 ObjectScript 调用此函数:

$SYSTEM.SQL.Functions.TOTIMESTAMP(date_string,format)

在为时间戳字段提供默认值时,可以在数据定义中使用 TO_TIMESTAMP 函数。例如:

CREATE TABLE Sample.MyEmpReviews
(EmpNum INTEGER UNIQUE NOT NULL,ReviewDate TIMESTAMP DEFAULT TO_TIMESTAMP(365,'DDD'))

在此示例中,插入记录的用户可以提供 ReviewDate 值,不提供 ReviewDate 值并获取当年第 365 天的默认时间戳,或者提供 NULLReviewDate 并获取 NULL

TO_TIMESTAMP 可以与 CREATE TABLEALTER TABLE ADD COLUMN 语句一起使用。在此上下文中只能使用 date_string 的文字值。

相关 SQL 函数

  • TO_TIMESTAMP 将格式化的日期和时间字符串转换为标准时间戳。
  • TO_CHAR 执行相反的操作;它将标准时间戳转换为格式化的日期和时间字符串。
  • TO_DATE 将格式化的日期字符串转换为日期整数。
  • CASTCONVERT 执行 TIMESTAMP 数据类型转换。

日期和时间字符串

date_string 参数指定日期和时间字符串文字。如果提供没有时间分量的日期字符串,则 TO_TIMESTAMP 提供时间值 00:00:00。如果您提供不带日期组件的时间字符串,则 TO_TIMESTAMP 提供当年 01–01(1 月 1 日)的日期。

可以为输入 date_string 提供任何类型的日期和时间字符串。每个 date_string 字符必须对应于格式字符串,但以下情况除外:

  • 可以包含或省略前导零(不带分隔符的 date_string 除外)。
  • 年份可以用两位数或四位数字指定。
  • 月份缩写(采用 MON 格式)必须与该区域设置的月份缩写相匹配。对于某些语言环境,月份缩写可能不是月份名称的初始连续字符。月份缩写不区分大小写。
  • 月份名称(格式为 MONTH)应指定为完整的月份名称。但是,TO_TIMESTAMP 不需要格式为 MONTH 的完整月份名称;它接受完整月份名称的初始字符,并选择月份列表中与该初始字母序列相对应的第一个月。因此,在英语中,“J” = “January”,“Ju” = “June”,“Jul” = “July”。指定的所有字符必须与完整月份名称的连续字符匹配;不检查完整月份名称之外的字符。例如,“Fe”“Febru”“FebruaryLeap”都是有效值; “Febs”不是有效值。月份名称不区分大小写。
  • 可以使用为语言环境定义的时间分隔符输入时间值。输出时间戳始终表示带有 ODBC 标准时间分隔符的时间值:冒号 (:) 表示小时、分钟和秒,句点 (.) 表示小数秒。省略的时间元素默认为零。默认情况下,返回的时间戳不带小数秒。

格式化

格式是根据以下规则指定的一个或多个格式元素的字符串:

  • 格式元素不区分大小写。
  • 几乎任何顺序或数量的格式元素都是允许的。
  • 格式字符串使用与 date_string 中的分隔符匹配的非字母数字分隔符(例如,空格、斜杠或连字符)分隔它们的元素。这些分隔符不会出现在使用标准时间戳分隔符的输出字符串中:连字符表示日期值,冒号表示时间值,句点(如果需要)表示小数秒。这种分隔符的使用不依赖于为您的 NLS 语言环境定义的 DateSeparator
  • 以下日期格式字符串不需要分隔符:MMDDYYYYDDMMYYYYYYYYMMDDHHMISSYYYYMMDDHHMIYYYYMMDDHHYYYYMMDDYYYYDDMMHHMISSHHMI。还支持不完整的日期格式 YYYYMM,并假定 DD 值为 01。请注意,在这些情况下,必须为所有元素(例如 MMDD)提供前导零,但最后一个元素除外。
  • 格式中不是有效格式元素的字符将被忽略。

格式元素

下表列出了 format 参数的有效日期格式元素:

Element Meaning
DD 两位数的月份日期 (01-31)。不需要前导零,除非格式不包含日期分隔符。
MM 两位数的月份编号(01-12;01 = 一月)。除非格式不包含日期分隔符,否则不需要前导零。在日语和中文中,月份数由一个数字组成,后跟“月份”的表意文字。
MON 月份的缩写名称,由当前语言环境中的 MonthAbbr 属性指定。默认情况下,在英文中,这是月份名称的前三个字母。在其他语言环境中,月份缩写可能超过三个字母长和/或可能不包含月份名称的第一个字母。不允许使用句点字符。不区分大小写。
MONTH 月份的全名,由当前语言环境中的 MonthName 属性指定。不区分大小写。
YYYY 四位数年份。
YY 年份的最后两位数。 YY 2 位数年份的前 2 位数默认为 19。
RR / RRRR 两位数年份到四位数年份的转换。 (见下文。)
DDD 一年中的一天。自 1 月 1 日以来的天数。(见下文。)
HH 小时,指定为 01–12 或 00–23,具体取决于是否指定了子午线指示符(AM 或 PM)。可以指定为 HH12 或 HH24。
MI 分钟,指定为 00–59。
SS 其次,指定为 00–59。
FF 一秒钟的分数。 FF 表示提供一个或多个小数位; date_string 可以指定任意数量的小数位数。 TO_POSIXTIME 准确返回六位精度,无论 date_string 中提供的精度如何。
AM / PM 子午线指示器,指定 12 小时制。 (见下文。)
A.M. / P.M. 子午线指示器(带句点)指定 12 小时制。 (见下文。)

TO_TIMESTAMP 格式还可以包括 D(星期几号)、DY(星期几缩写)或 DAY(星期几名称)元素以匹配输入的 date_string。但是,这些格式元素未经过验证或用于确定返回值。

两位数年份转换(RRRRRR 格式)

RR 格式提供两位数到四位数的年份转换。此转换基于当年。如果当前年份在上半世纪(例如,2000 年到 2050 年),则从 00 到 49 的两位数年份扩展到当前世纪的四位数年份,从 50 到 2 位数的年份99 年扩大到上个世纪的四位数年份。如果当前年份在世纪下半叶(例如,2050 年到 2099 年),则所有两位数年份都将扩展为当前世纪中的四位数年份。将两位数年份扩展到四位数年份如下例所示:

SELECT TO_TIMESTAMP('29 September 00','DD MONTH RR'),TO_TIMESTAMP('29 September 18','DD MONTH RR'),TO_TIMESTAMP('29 September 49','DD MONTH RR'),TO_TIMESTAMP('29 September 50','DD MONTH RR'),TO_TIMESTAMP('29 September 77','DD MONTH RR')2000/9/29 0:00:00    2018/9/29 0:00:00   2049/9/29 0:00:00   1950/9/29 0:00:00   1977/9/29 0:00:00

RRRR 格式允许您输入两位数和四位数字的混合年份。四位数年份不变(与 YYYY 相同)。使用 RR 格式算法将两位数年份转换为四位数年份。这在以下示例中显示:

SELECT TO_TIMESTAMP('29 September 2018','DD MONTH RRRR')AS FourDigit,TO_TIMESTAMP('29 September 18','DD MONTH RRRR') AS TwoDigit,TO_TIMESTAMP('29 September 1949','DD MONTH RRRR') AS FourDigit,TO_TIMESTAMP('29 September 49','DD MONTH RRRR') AS TwoDigit,TO_TIMESTAMP('29 September 1950','DD MONTH RRRR') AS FourDigit,TO_TIMESTAMP('29 September 50','DD MONTH RRRR') AS TwoDigit2018/9/29 0:00:00  2018/9/29 0:00:00   1949/9/29 0:00:00   2049/9/29 0:00:00   1950/9/29 0:00:00   1950/9/29 0:00:00

一年中的某一天(DDD 格式)

可以使用 DDD 将一年中的某一天(自 1 月 1 日以来经过的天数)转换为实际日期。格式字符串 DDD YYYY 必须与由整数天数和四位数年份组成的相应 date_string 配对。 (与 DDD 一起使用时,两位数的年份必须指定为 RR(而不是 YY)。)格式字符串 DDD 默认为当前年份。经过的天数必须是 1 到 365 范围内的正整数(如果 YYYY 是闰年,则为 366)。四位数年份必须在年份日期范围内:0001 到 9999。(如果省略年份,则默认为当前年份。) DDD 和年份(YYYYRRRRRR)格式元素可以在任何命令;它们之间的分隔符是强制性的;此分隔符可以是空格。以下示例显示了这一年中的一天的用法:

SELECT TO_TIMESTAMP('2018:160','YYYY:DDD')2018/6/9 0:00:00

如果格式字符串同时包含 DDDDD 元素,则 DDD 元素占主导地位。这在以下示例中显示,它返回 2008-02-29 00:00:00(不是 2008-12-31 00:00:00):

SELECT TO_TIMESTAMP('2018-12-31-60','YYYY-MM-DD-DDD')2018/3/1 0:00:00

TO_TIMESTAMP 允许返回对应于一年中某一天的日期表达式。 TO_CHAR 允许返回与日期表达式对应的一年中的哪一天。

第一年之前的日期

TO_TIMESTAMPTO_POSIXTIME 可以表示追溯到 0001 年 1 月 1 日的日期。

TO_DATE 提供儒略日期格式,它可以表示追溯到公元前 4712 年 1 月 1 日的日期。儒略日期转换将七位内部正整数值(儒略日计数)转换为显示格式或 ODBC 格式的日期。儒略日期不支持时间值。

12 小时制时间

  • date_string 时间值后跟“am”“pm”(没有句点)。这些子午线指标不区分大小写,可以附加到时间值后,也可以用一个或多个空格分隔。
  • 该格式遵循具有'a.m.''p.m.'元素(任一个)的时间格式,与时间格式分开一个或多个空格。例如:DD-MON-YYYY-HH:MI:SSFF P.M.此格式支持12小时时钟日期串值,例如下午2:23,2:23:54.6pm,下午2:23:54,下午2:23:54和下午2:23:54(假设为上午)。子午线指标不区分大小写。当使用带有周期的子午线指示器时,必须将其与时间值分开一个或多个空格。

示例

以下嵌入式 SQL 示例以各种格式指定日期字符串。第一个使用默认格式,其他指定格式。所有这些都将 date_string 转换为 2018–06–29 00:00:00 的时间戳值:

/// d ##class(PHA.TEST.SQLFunction).ToTimestamp()
ClassMethod ToTimestamp()
{&sql(SELECTTO_TIMESTAMP('29 JUN 2018'),TO_TIMESTAMP('2018 Jun 29','YYYY MON DD'),TO_TIMESTAMP('JUNE 29, 2018','month dd, YYYY'),TO_TIMESTAMP('2018***06***29','YYYY***MM***DD'),TO_TIMESTAMP('06/29/2018','MM/DD/YYYY'),TO_TIMESTAMP('29/6/2018','DD/MM/YYYY')INTO :a,:b,:c,:d,:e,:f)if SQLCODE = 0 { w !,a,!,b,!,c,!,d,!,e,!,f } else { w "SQLCODE error:",SQLCODE }
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).ToTimestamp()2018-06-29 00:00:00
2018-06-29 00:00:00
2018-06-29 00:00:00
2018-06-29 00:00:00
2018-06-29 00:00:00
2018-06-29 00:00:00

以下示例指定 YYYYMM 日期格式。它不需要元素分隔符。 TO_TIMESTAMP 提供缺失的日期和时间值:

 SELECT TO_TIMESTAMP('201806','YYYYMM')2018/6/1 0:00:00

以下示例仅指定 HH:MI:SS.FF 时间格式。 TO_TIMESTAMP 提供缺失的日期值。在每种情况下,此示例都返回 2018-01-01 的日期(其中 2018 是当前年份):

SELECT TO_TIMESTAMP('11:34','HH:MI:SS.FF'),TO_TIMESTAMP('11:34:22','HH:MI:SS.FF'),TO_TIMESTAMP('11:34:22.00','HH:MI:SS.FF'),TO_TIMESTAMP('11:34:22.7','HH:MI:SS.FF'),TO_TIMESTAMP('11:34:22.7000000','HH:MI:SS.FF')
2022/1/1 11:34:00    2022/1/1 11:34:22   2022/1/1 11:34:22   2022/1/1 11:34:22   2022/1/1 11:34:22

请注意,小数秒完全按照指定传递,没有填充或截断。

以下示例显示了一些其他方法来指定带小数秒的时间格式:

SELECT TO_TIMESTAMP('113422.9678','HHMISS.FF'),TO_TIMESTAMP('9678.113422','FF.HHMISS'),TO_TIMESTAMP('9678.20170804113422','FF.YYYYMMDDHHMISS')2022/1/1 11:34:22  2022/1/1 11:34:22   2017/8/4 11:34:22

TO_TIMESTAMP 的所有三个调用都返回一个 ODBC 格式的时间戳,其时间部分的值为 11:34:22.9678。对于前两个,省略的日期部分默认为当年的 1 月 1 日;第三个提供日期部分值。

第147章 SQL函数 TO_TIMESTAMP相关推荐

  1. 第101章 SQL函数 NVL

    文章目录 第101章 SQL函数 NVL 大纲 参数 描述 日期和时间显示转换 NULL 处理函数比较 示例 第101章 SQL函数 NVL 测试 NULL 并返回适当表达式的函数. 大纲 NVL(c ...

  2. 第140章 SQL函数 TO_CHAR(一)

    文章目录 第140章 SQL函数 TO_CHAR(一) 大纲 参数 描述 有效和无效的参数 TO_CHAR 和 TO_DATE 相关 SQL 函数 日期到字符串的转换 日期转换示例 一年中的一天 儒略 ...

  3. 第六十三章 SQL函数 IFNULL

    文章目录 第六十三章 SQL函数 IFNULL 大纲 参数 描述 返回值数据类型 日期和时间显示转换 %List显示转换 NULL处理函数比较 示例 第六十三章 SQL函数 IFNULL 测试NULL ...

  4. 第143章 SQL函数 TO_DATE(一)

    文章目录 第143章 SQL函数 TO_DATE(一) 大纲 参数 描述 相关 SQL 函数 日期字符串 格式化 默认日期格式 格式元素 单个日期元素的日期格式 两位数年份转换(RR 和 RRRR 格 ...

  5. 第六十六章 SQL函数 ISNULL

    文章目录 第六十六章 SQL函数 ISNULL 大纲 参数 描述 日期和时间显示转换 比较的NULL处理函数 示例 第六十六章 SQL函数 ISNULL 测试NULL并返回相应表达式的函数. 大纲 I ...

  6. 第四十六章 SQL函数 DAY

    文章目录 第四十六章 SQL函数 DAY 大纲 参数 描述 第四十六章 SQL函数 DAY 返回日期表达式的月份日期的日期函数. 大纲 DAY(date-expression){fn DAY(date ...

  7. 第153章 SQL函数 UCASE

    文章目录 第153章 SQL函数 UCASE 大纲 参数 描述 示例 第153章 SQL函数 UCASE 将字符串中的所有小写字母转换为大写字母的大小写转换函数. 大纲 UCASE(string-ex ...

  8. 第二十四章 SQL函数 CEILING

    文章目录 第二十四章 SQL函数 CEILING 大纲 参数 描述 示例 第二十四章 SQL函数 CEILING 数值函数,返回大于或等于给定数值表达式的最小整数. 大纲 CEILING(numeri ...

  9. 第九十五章 SQL函数 MINUTE

    文章目录 第九十五章 SQL函数 MINUTE 大纲 参数 描述 示例 第九十五章 SQL函数 MINUTE 返回日期时间表达式的分钟的时间函数. 大纲 {fn MINUTE(time-express ...

最新文章

  1. QNX Hypervisor管理程序
  2. 为iframe添加鼠标事件
  3. .Netcore使用Session
  4. am4针脚定义_AMD Zen处理器/AM4接口针脚数大增,比英特尔还多-控制器/处理器-与非网...
  5. ubuntu下wget下载Linux内核源码、make生成.config文件
  6. [html] 一般习惯把js写在</body>前,但有例外的情况吗?说说看
  7. MariaDB安装1,2
  8. home assistant gpio 温度计_Calsys 500BB辐射温度计
  9. 安装openfst 和 threx的经过
  10. 高一信息技术 计算机配件的真伪辨别,高一信息技术组PPT.ppt
  11. 光纤传感技术:基于Matlab的OFDR系统数值仿真
  12. 热力地图高德_调用高德地图API(热力图)详解
  13. 财务女,30岁无情被辞:想给财务提个醒!!
  14. 解决adobe reader卸载不干净的问题
  15. python测试脚本实例-python脚本测试
  16. Kotlin 密封类
  17. 易到完成股权变更 乐视仍未完全退出中信系入局
  18. mysql-22.MySQL有哪些“饮鸩止渴”提高性能的方法?
  19. vb.net LPT端口 开钱箱和小票纸打印超时问题解决办法
  20. 回调函数的注册机制为什么会在嵌入式固件开发中应用如此广泛?

热门文章

  1. RPGMakerMV--问题
  2. 微信小程序| 打造ChatGPT英语四六级背单词小程序
  3. 招募 Python 技术公开课讲师 | 放大你的专业影响力,获得专属奖励!
  4. 【飞控开发高级教程6】疯壳·开源编队无人机-AI语音控制
  5. 二十四、ajax请求
  6. 修改 win10 右键“新建”菜单(原理、两种方法及注意事项)
  7. java metrics.counter_度量指标(Metrics)
  8. 肠内、外营养的优缺点有哪些?
  9. php 跨站脚本攻击漏洞,php安全:全面解析跨站脚本攻击
  10. Blog代码高亮无需插件 - 代码发芽网