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 编写的客户端应用程序之间执行的日期/时间转换。