SQL Server Native Client Conversions (OLE DB)

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics 平台系统(PDW)

本部分介绍了如何在 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]]

  • 时间字符串的格式为

    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。

本节内容

在客户端和服务器之间执行的转换
描述使用 SQL Server Native Client OLE DB 和 SQL Server 2008 (10.0.x) (或更高版本)编写的客户端应用程序之间执行的日期/时间转换。

在服务器和客户端之间执行的转换
描述在 SQL Server 2008(10.0.x) (或更高版本)与使用 SQL Server Native Client OLE DB 编写的客户端应用程序之间执行的日期/时间转换。

另请参阅

日期和时间改进 (OLE DB)