Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 数据类型 » 数据类型转换

 

不明确的字符串到日期的转换

当需要日期值时,即使年份在字符串中仅用两位来表示,SQL Anywhere 也会自动将字符串转换为日期。

如果年份值中的世纪部分被省略,转换方法将取决于 nearest_century 数据库选项。

nearest_century 数据库选项是一个数字,充当 19YY 日期值和 20YY 日期值之间的断点。

小于 nearest_century 值的两位年份值将转换为 20yy,而大于或等于该值的年份将转换为 19yy。

如果未设置此选项,将采用缺省设置 50。因此,两位年份字符串将被理解为是指介于 1950 到 2049 之间的年份。

此 nearest_century 选项是在 SQL Anywhere 5.5 版中引入的。在 5.5 版中,缺省设置为 0。

不明确的日期转换示例

以下语句创建了一个表,该表可用来说明 SQL Anywhere 中不明确日期信息的转换。

CREATE TABLE T1 (C1 DATE);

表 T1 包含一列 C1,其数据类型为 DATE。

以下语句将日期值插入列 C1 中。SQL Anywhere 会自动转换含有不明确年份值的字符串,这种字符串用两位表示年份,但没有指示世纪。

INSERT INTO T1 VALUES('00-01-01');

缺省情况下,nearest_century 选项设置为 50,因此 SQL Anywhere 会将上述字符串转换为日期 2000-01-01。以下语句校验此插入的结果。

SELECT * FROM T1;

用以下语句更改 nearest_century 选项会改变转换过程。

SET OPTION nearest_century = 0;

当 nearest_century 选项设置为 0 时,用同样的语句执行先前的插入会产生不同的日期值:

INSERT INTO T1 VALUES('00-01-01');

上述语句此时插入的日期将是 1900-01-01。请使用以下语句校验结果。

SELECT * FROM T1;