SQL 数据错误:将 varchar 数据类型转换为日期时间数据类型会导致值超出范围

本文关键字:数据 范围 数据类型 日期 错误 varchar 类型转换 SQL 时间 | 更新日期: 2023-09-27 18:31:38

>我有一个返回此错误的 SQL 查询:

将 varchar 数据类型转换为日期时间数据类型导致值超出范围

这是查询:

POQuery = "SELECT Distinct PurchaseOrders.POrderID, PurchaseOrders.VendorName, PurchaseOrderDetail.ArrDate "
          + "FROM PurchaseOrders "
          + "FULL JOIN PurchaseOrderDetail ON PurchaseOrders.POrderID = PurchaseOrderDetail.POrderID "
          + "WHERE PurchaseOrders.Buyer = @Buyer and ArrDate >= convert(DateTime, '"
          + datePickerStart.Value.ToString("mm/dd/yyyy") + "') and ArrDate <= convert(DateTime, '"
          + datePickerEnd.Value.ToString("mm/dd/yyyy") + "')";

我正在使用日期选择器来选择日期。

SQL 数据错误:将 varchar 数据类型转换为日期时间数据类型会导致值超出范围

您的问题与文化有关...您永远不应该依赖特定于文化的日期时间格式!否则,您必须告诉 T-SQL CONVERT函数特定格式(在您的情况下应该是 101)...

试试这个:

SET LANGUAGE ENGLISH;
SELECT CONVERT(datetime, '1/22/2016 9:14:44 AM'); --works
GO
SET LANGUAGE GERMAN;
SELECT CONVERT(datetime, '1/22/2016 9:14:44 AM'); --error
GO
SET LANGUAGE GERMAN;
SELECT CONVERT(datetime, '1/22/2016 9:14:44 AM',101); --works

最好是使用ISO8601 2016-01-22T18:59:00

或 ODBC 格式之一,即

{d'2016-01-22'}
{t'18:59:00'}
{ts'2016-01-22 18:59:00'}

这样做,您甚至不必调用转换...

而且 - 正如其他人指出的那样 - 你应该使用参数而不是连接的字符串......