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") + "')";
我正在使用日期选择器来选择日期。
您的问题与文化有关...您永远不应该依赖特定于文化的日期时间格式!否则,您必须告诉 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'}
这样做,您甚至不必调用转换...
而且 - 正如其他人指出的那样 - 你应该使用参数而不是连接的字符串......