2015-05-01 80 views
1

我用下面的SQL查询工作,我得到了以下错误:消息转换为varchar日期类型为datetime错误SQL

242, Level 16, State 3, Line 1 The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

我的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。任何关于解决或解决问题的想法?

+0

你确定没有无效数据在专栏,可能是'2014-13-01 00:00:00.000' – Hogan

回答

-1

具有日期时间字符串的CAST和CONVERT的行为由SET DATEFORMAT进行管理。如果您的日期格式为dmy(日/月/年),则您的文字'7/31/2015'可能会被解释为{月:31,日:7,年:2015},这不是有效的日期。

在这里看到: SET DATEFORMAT (Transact-SQL)

一件事,这将有助于你在这种情况下是要始终使用ISO 8601格式的这些文字。这将绕过CAST和CONVERT的解释行为。

对于你的情况,你可以把它改写为:

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

这个问题实际上是有只有30天在四月,没有31

相关问题