可以使用以下方式之一向数据库发送日期和时间:
使用任何接口,以字符串形式
使用 ODBC 或 OLE DB,作为二进制值(例如使用 ODBC TIMESTAMP_STRUCT 结构)
使用嵌入式 SQL,以 SQLDATETIME 结构形式
具有时区偏移的日期和时间仅可作为字符串发送到数据库。
将日期以字符串(对于 DATE 数据类型)或字符串的一部分(对于 TIMESTAMP 或 TIMESTAMP WITH TIME ZONE 数据类型)形式发送到数据库时,可以通过各种不同的方法指定字符串,包括关于日期和时间表示的国际标准 ISO 8601 中所述的方法。
可以采用以下 ISO 8601 格式之一指定日期。
日历日期 日历日期的格式为 YYYY-MM-DD,其中 YYYY 为公历年份,MM 为一年中 01(一月)到 12(十二月)之间的月份,DD 为一个月中 01 到 31 之间的日期。例如,'2010-04-01' 表示 2010 年四月的第一天。ISO 8601 不要求使用分隔符。因此,'20100401' 也表示 2010 年四月的第一天。
ISO 日历日期 | 格式 | 示例 |
---|---|---|
基本 | YYYYMMDD | 20100401 |
扩展 | YYYY-MM-DD | 2010-04-01 |
周日期 另一种 ISO 日期格式是周日期。该格式为 YYYY-Www-D,其中 YYYY 为公历年份,W 为字母 W,ww 为一年中 01(第一周)到 52 或 53(最后一周)之间的周,D 为一周中 1(星期一)到 7(星期日)之间的日。例如,'2010-W13-4' 表示 2010 年第十三周的第四天(2010 年 4 月 1 日)。ISO 8601 不要求使用分隔符。因此,'2010W134' 也表示 2010 年第十三周的第四天。为降低精度,可以对该表示形式省略一位数字('2010W13' 表示 2010 年 3 月 29 日)。
ISO 周日期 | 格式 | 示例 |
---|---|---|
基本 | YYYYWwwD | 2010W134 |
扩展 | YYYY-Www-D | 2010-W13-4 |
序数日期 最后一种 ISO 日期格式为序数日期。该格式为 YYYY-DDD,其中 YYYY 为公历年份,DDD 为日历年中日历天的序数。例如,'2010-091' 表示 2010 年四月的第一天。ISO 8601 不需要使用分隔符。例如,'2010091' 也表示 2010 年 4 月 1 日。最大序数日期为闰年的 366。例如,'2008366' 表示 2008 年的最后一天(2008 年 12 月 31 日)。
ISO 序数日期 | 格式 | 示例 |
---|---|---|
基本 | YYYYDDD | 2010091 |
扩展 | YYYY-DDD | 2010-091 |
支持其它日期格式。SQL Anywhere 对包含数据的字符串的解释非常灵活。只要存在任何不明确之处,date_order 和 nearest_century 数据库选项设置就会指导数据值的解释。例如,根据 date_order 设置的不同,数据库服务器可将 '02/05/2002' 解释为 5 月 2 日 (DMY)、2 月 5 日 (MDY) 或非法值 (YMD)。
nearest_century 设置决定两位数年份值解释为二十世纪还是二十一世纪中的某年。例如,在字符串 '02/05/10' 中,date_order 设置决定将 02 或 10 解释为年份,而 nearest_century 设置则决定 02 表示 1902 还是 2002,或者 10 表示 1910 还是 2010。nearest_century 选项的值会影响两位数年份的解释:对于小于 nearest_century 的值,将为其加上 2000;对于所有其它值,将为其加上 1900。此选项的缺省值为 50。因此,缺省情况下,年份 50 将解释为 1950 年,而年份 49 则解释为 2049 年。
下表显示了如何使用所示的 date_order 设置和设为 50 的 nearest_century 设置指定 2010 年四月的第一天。
date_order | 格式 | 示例 |
---|---|---|
YMD | YYYY/MM/DD | 2010/04/01 |
YMD | YY/MM/DD | 10/04/01 |
MDY | MM/DD/YYYY | 04/01/2010 |
MDY | MM/DD/YY | 04/01/10 |
DMY | DD/MM/YYYY | 01/04/2010 |
DMY | DD/MM/YY | 01/04/10 |
由于 ISO 8601 格式不会含糊不清且不受 date_order 和 nearest_century 用户设置的影响,因此建议使用这类格式。
也可以使用月份名称来指定日期。例如,'2010 April 01'、'April 1, 2010' 和 '1 April 2010'。当年份指定不明确时,将使用 date_order 选项确定月份部分的年和日。因此,'01 April 10' 在 date_order 为 'YMD' 时解释为 2001 年 4 月 10 日,在 date_order 为 'DMY' 时解释为 2010 年 4 月 1 日。
日期中的年份范围可介于 0001 到 9999 之间。SQL Anywhere 中的最小日期为 0001-01-01。
如果字符串只包含部分日期规范,将使用缺省值填写日期。使用以下缺省值:
year 未指定年份(例如,'April 1')时将使用当前年份。
month 未指定年份和月份(例如,'23:59:59')时将使用当前月份,或者如果指定了年份(例如,'2010')则使用 01。
day 未指定年份和月份(例如,'23:59:59')时将使用当日,或者如果指定了月份(例如,'April')则使用 01。
在以下示例中,日期值根据当前日期构造而成。
SELECT CAST('23:59:59' AS TIMESTAMP); |
一天中的时间可以使用 24 小时计时系统按照 ISO 8601 格式进行指定。即 hh:mm:ss,其中 hh 为自午夜起所经过的完整小时数,mm 为自小时开始计时起的完整分钟数,ss 为自分钟开始计时起的完整秒数。例如,'23:59:59' 表示差一秒到午夜这一时间。
ISO 8601 标准允许省略秒和分钟。例如,'23:59' 表示差六十秒到午夜这一时间。
ISO 8601 标准还允许在秒位中包含小数。小数秒使用逗号 (,) 或句点 (.) 指定。小数最多存储到六个小数位。例如,'23:59:59,500000' 和 '23:59:59.500000' 都表示差半秒到午夜这一时间。SQL Anywhere 不支持小数分钟或小时。
当时间包含指定日期时,ISO 8601 不需要使用冒号分隔符。例如,'235959' 表示差一秒到午夜这一时间。
一天当中的最大时间为 '24:00:00'。这表示午夜。与日期组合使用时,可表示午夜或第二天的 00:00:00。例如,'2010-04-01 24:00:00' 等同于 '2010-04-02 00:00:00'。
ISO 时间 | 格式 | 示例 |
---|---|---|
基本(带日期) | hhmmss.ssssss | 20100401 235959.500000 |
基本(带日期) | hhmmss,ssssss | 20100401 235959,500000 |
扩展 | hh:mm:ss.ssssss | 23:59:59.500000 |
扩展 | hh:mm:ss,ssssss | 23:59:59,500000 |
同样支持非 ISO AM 和 PM 指示符。例如,'11:59:59 PM' 等同于 '23:59:59'。
AM/PM | 格式 | 示例 |
---|---|---|
AM | hh:mm:ss.ssssss AM | 11:59:59.500000 AM |
AM | hh:mm:ss,ssssss AM | 11:59:59,500000 AM |
PM | hh:mm:ss.ssssss PM | 11:59:59.500000 PM |
PM | hh:mm:ss,ssssss PM | 11:59:59,500000 PM |
ISO 8601 允许使用空格字符或字母 T 来结合日期和时间。例如,'2010-04-01 23:59:59' 和 '2010-04-01T23:59:59' 都表示 2010 年四月第一天差一秒到午夜这一时间。可以省略连字符和冒号分隔符。例如,'20100401T235959' 也表示相同的日期和时间。作为此格式的扩展,SQL Anywhere 也支持省略日期和时间分隔符。例如,'20100401235959' 也表示相同的日期和时间。
SQL Anywhere 支持组合使用基本和扩展日期时间格式。例如,'20100401T23:59:59' 组合了基本和扩展两种格式。
ISO 8601 也允许向日期和时间字符串添加时区偏移。采用以下格式之一:
Z (Zulu) 日期和时间介于协调通用时间(Coordinated Universal Time,简称 UTC)范围内。例如,'2010-04-01 23:00:00Z' 表示 2010 年四月第一天的 11:00 PM 协调通用时间。
+hh:mm 所指定的日期和时间为早于 UTC 指定小时数和分钟数的时间。例如,'2010-04-01 23:00:00+04:00' 表示 UTC 以东 4 小时时区中 2010 年四月第一天的 11:00 PM。
-hh:mm 所指定的日期和时间为晚于 UTC 指定小时数和分钟数的时间。例如,'2010-04-01 23:00:00-05:00' 表示 UTC 以西 5 小时时区中 2010 年四月第一天的 11:00 PM。
如果分钟数为 0,则无需在时区偏移中进行指定。此外,也可以在时区偏移前面添加一个空格。例如,'2010-04-01 23:00:00 -03:30' 表示 UTC 以西三个半小时时区中 2010 年四月第一天的 11:00 PM。
ISO 时区 | 格式 | 示例 |
---|---|---|
基本 | Z | 20100401 235959Z |
基本 | +hhmm | 20100401 235959+0400 |
基本 | +hh | 20100401 235959+04 |
基本 | -hhmm | 20100401 235959-0500 |
基本 | -hh | 20100401 235959-05 |
基本 | 使用 T,小数 | 20100401T235959.50-0330 |
扩展 | Z | 2010-04-01 23:59:59Z |
扩展 | +hh:mm | 2010-04-01 23:59:59+04:00 |
扩展 | -hh:mm | 2010-04-01 23:59:59-05:00 |
扩展 | 使用 T,小数 | 2010-04-01T23:59:59.50-03:30 |
SQL Anywhere 支持组合使用基本和扩展日期、时间及时区格式。例如,'20100401T23:59:59-05' 组合了基本和扩展两种格式。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |