绑定和转换 (OLE DB)

本节介绍如何在 datetime 值和 datetimeoffset 值之间进行转换。 本节中描述的这些转换或者已由 OLE DB 提供,或者是 OLE DB 的一致扩展。

OLE DB 中时间和日期的文字和字符串的格式通常遵循 ISO,并且不依赖于客户端区域性。 但 DBTYPE_DATE 是个例外,它遵循的标准是 OLE 自动化。 但是,因为 SQL Server Native Client 只在数据从客户端传输或传输到客户端时在两个类型之间转换,所以,应用程序无法强制 SQL Server Native Client 在 DBTYPE_DATE 和字符串格式之间转换。 否则,字符串使用以下格式(括号中的文本指示某一可选元素):

  • datetime 和 datetimeoffset 字符串的格式是:

    yyyy-mm-dd[ hh:mm:ss[.9999999][ ± hh:mm]]

  • time 字符串的格式是:

    hh:mm:ss[.9999999]

  • date 字符串的格式是:

    yyyy-mm-dd

注意注意

SQL Server Native Client 和 SQLOLEDB 的早期版本实现了 OLE 转换,以防标准转换失败。 因此,SQL Server Native Client 10.0 和更高版本执行的某些转换不同于 OLE DB 规范。

从字符串转换允许更灵活处理空格和字段宽度。 有关详细信息,请参阅针对 OLE DB 日期/时间改进的数据类型支持中的“数据格式:字符串和文字”一节。

下面是一般的转换规则:

  • 在某一字符串转换为日期/时间类型时,该字符串首先作为某一 ISO 文字进行分析。 如果此分析失败,则该字符串将作为某一 OLE 日期文字进行分析,该日期文字具有时间部分。

  • 如果未提供时间但接收方可存储时间,则将时间设置为零。 如果未提供日期但接收方可存储日期,则在使用 ISO 转换时将该日期设置为当前日期,在使用 OLE 转换时将该日期设置为 1899-12-30。

  • 如果在客户端正使用的数据类型中未提供时区,但服务器可以存储时区,则假定客户端上的数据处于客户端时区中。

  • 如果在服务器上未提供时区,但客户端具有时区信息,则假定采用 UTC 时区。 此行为与服务器行为不同。

  • 如果提供了时间但接收方无法存储时间,则忽略时间部分。

  • 如果提供了日期但接收方无法存储日期,则忽略日期部分。

  • 如果在从客户端转换为服务器时截断了秒或秒的小数部分,则返回 DB_E_ERRORSOCCURRED 并且设置状态 DBSTATUS_E_DATAOVERFLOW。

  • 如果在从服务器转换为客户端时截断了秒或秒的小数部分,则设置 DBSTATUS_S_TRUNCATED。

本节涉及的主题

请参阅

概念

日期/时间改进 (OLE DB)