将varchar日期类型转换为datetime错误SQL

将varchar日期类型转换为datetime错误SQL,sql,datetime,varchar,getdate,Sql,Datetime,Varchar,Getdate,我正在使用下面的SQL查询,并得到以下错误:Msg 242,级别16,状态3,第1行varchar数据类型的转换 对日期时间数据类型的更改导致值超出范围 我的SQL查询如下所示: SELECT customer_del_hist.customer_number, MAX(customer_del_hist.serve_location) AS serve_location, MAX(customer_del_hist.product_number) AS product_numbe

我正在使用下面的SQL查询,并得到以下错误:Msg

242,级别16,状态3,第1行varchar数据类型的转换 对日期时间数据类型的更改导致值超出范围

我的SQL查询如下所示:

SELECT        customer_del_hist.customer_number, MAX(customer_del_hist.serve_location) AS serve_location, MAX(customer_del_hist.product_number) AS product_number, 
                         MAX(customer_del_hist.del_date) AS del_date, MAX(order_rte_bal.warehouse) AS warehouse, MAX(order_rte_bal.route_number) AS route_number, 
                         MAX(order_rte_bal.route_day) AS route_day
FROM            customer_del_hist INNER JOIN
                         inv_master ON customer_del_hist.product_number = inv_master.product_number INNER JOIN
                         order_header ON customer_del_hist.order_number = order_header.order_number INNER JOIN
                         order_rte_bal ON order_header.warehouse_number = order_rte_bal.warehouse AND order_header.route_number = order_rte_bal.route_number AND
                         order_header.route_day = order_rte_bal.route_day AND order_header.delivery_date = order_rte_bal.route_date
WHERE        (customer_del_hist.del_date BETWEEN '5/01/2015' AND '7/31/2015') AND (inv_master.inventory_category IN ('02', '03', '60', '74')) AND 
                         (customer_del_hist.customer_number NOT IN
                             (SELECT        h2.customer_number
                               FROM            customer_del_hist AS h2 INNER JOIN
                                                         inv_master AS i ON h2.product_number = i.product_number
                               WHERE        (h2.del_date BETWEEN '6/01/2014' AND '4/31/2015') AND (i.inventory_category IN ('02', '03', '60', '74'))))
GROUP BY customer_del_hist.customer_number

我在必要的表格中查看了日期,它的显示类似于以下内容:2014-05-21 00:00:00.000。有没有关于变通或修复的想法

使用日期时间字符串进行强制转换和转换的行为由SET-DATEFORMAT控制。如果您的日期格式为dmy(日/月/年),您的文字“7/31/2015”可能会被解释为{月:31日,日:7日,年:2015},这是无效的日期

请看这里:

在这些情况下,有一件事可以帮助您,那就是始终对这些文本使用ISO8601格式。这将绕过强制转换和转换的解释行为

对于您的案例,您可以将其改写为:

customer_del_hist.del_date BETWEEN '2015-05-01' AND '2015-07-31'

问题是4月份只有30天,而不是31天

您确定该列中没有无效数据,可能类似于
2014-13-01 00:00:00.000