我在与下面的查询问题:“ORDER BY” SQL问题(超出范围的日期/时间值)
SELECT
Consignments.LegacyID,
Consignments.TripDate,
Consignments.CollectionName,
CASE
WHEN Sage2.InvoiceSummaryType = 'HT' THEN DeliveryTown
ELSE DeliveryName + ', ' + DeliveryTown + ', ' + DeliveryPostCode END AS 'DeliveryName',
Consignments.Pallets,
Consignments.Weight,
Consignments.BaseRate,
Consignments.FuelSurcharge,
Consignments.AdditionalCharges,
Consignments.BaseRate * Consignments.Quantity AS 'InvoiceValue',
Consignments.InvoiceNumber,
Consignments.Customer
FROM
Consignments
INNER JOIN SageAccount
ON Consignments.Customer = SageAccount.LegacyID
AND SageAccount.Customer = 'true'
LEFT OUTER JOIN SageAccount AS Sage2
ON SageAccount.InvoiceAccount = Sage2.LegacyID
WHERE
(Sage2.Customer = 'true')
AND (Consignments.Customer = @Customer)
AND (Consignments.InvoiceNumber IS NOT NULL)
OR (Sage2.Customer = 'true')
AND (Consignments.InvoiceNumber IS NOT NULL)
AND (Sage2.InvoiceAccount = @Customer)
ORDER BY
CASE
WHEN Sage2.InvoiceSummaryType = 'HR' THEN TripDate
WHEN Sage2.InvoiceSummaryType = 'HS' THEN Consignments.LegacyID
END
出于某种原因,它不断给我下面的错误:
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value order by
但只有当它试图Order By TripDate
,即当案“HR”发生。 TripDate是一个'日期时间字段'。
任何想法?
从某种角度来看,我猜你的怀疑是正确的。在集合包含两种数据之前可能没有问题。在那之后,你可能会说他们两个都会导致问题,或者说他们都不会导致问题,只是一起使用它们而导致错误。事实上,正如你所说的那样,避免混合使用数据类型,或者在将它们用于比较之前将它们强制为一些常见类型。 +1 – 2010-12-02 13:24:19
感谢哥们,我试过了你的第二个问题,它的工作很完美。 – Chris 2010-12-02 15:04:20