2014-09-01 173 views
-1

我有以下代码...SQL日期时间转换

SELECT 

CAST (pos.DateShipped AS DATE) AS DateShipped, 
COALESCE(s.Code, c1.CountryName) AS Region_Name, 
c2.CurrencyCode, 
NULL, 
NULL, 
NULL, 
NULL, 
SUM(pos.PriceIncTax/(1 + ct.TaxRate) * ct.TaxRate * pos.Quantity * pos.ExchangeRate) AS VAT_Sales_Curr 

FROM 
dbo.POSItem (NOLOCK) pos 
JOIN dbo.ReceiptDrop (NOLOCK) RD ON rd.ReceiptId = pos.ReceiptId 
LEFT JOIN dbo.CountryTax (NOLOCK) CT ON rd.CountryId = ct.CountryId AND pos.DateShipped >= ct.DateFrom AND (pos.DateShipped < ct.DateTo OR ct.DateTo IS NULL) 
LEFT OUTER JOIN dbo.State (NOLOCK) S ON rd.CountryId = s.CountryId AND rd.County = s.Code 
LEFT OUTER JOIN dbo.Country (NOLOCK) C1 ON rd.CountryId = c1.CountryId 
LEFT OUTER JOIN dbo.Country (NOLOCK) C2 ON pos.CurrencyId = c2.CountryId 

WHERE 
pos.DateShipped >= '28-07-2014' 
AND pos.DateShipped < '02-09-2014' 
AND pos.DateShipped IS NOT NULL 

并生成错误....

varchar数据类型到datetime数据类型的转换导致超出范围的价值。

你可以建议在最简单的方法来纠正这个在SQL 2008

非常感谢,

+0

(NOLOCK)应为WITH WITH(NOLOCK) – 2014-09-01 16:38:18

回答

0

用于转换为varchar到日期时间使用这个

转换(日期时间,列名,101)

101用于数据格式mm-dd-yyyy 103对于dd-mm-yyyy

举例convert(datatime,pos.DateShipped,103)> = '28 -07-2014'