這裏是我的查詢:SQL Server的日期轉換錯誤
SELECT
*
FROM
(SELECT
A.Name, AP.PropertyName, APV.Value AS [PropertyValue],
CONVERT(DATETIME, APV.VALUE, 101) AS [DateValue]
FROM dbo.Account AS A
JOIN dbo.AccountProperty AS AP ON AP.AccountTypeId = A.AccountTypeId
JOIN dbo.AccountPropertyValue AS APV ON APV.AccountPropertyId = APV.AccountPropertyId
AND APV.AccountId = A.AccountId
WHERE
A.AccountTypeId = '19602AEF-27B2-46E6-A068-7E8C18B0DD75' --VENDOR
AND AP.PropertyName LIKE '%DATE%'
AND ISDATE(APV.Value) = 1
AND LEN(SUBSTRING(REVERSE(APV.Value), 0 , CHARINDEX('/', REVERSE(APV.Value)))) = 4 --ENSURE 4 digit year
) AS APV
WHERE
APV.DateValue < GETDATE()
這將導致以下錯誤:
Conversion failed when converting date and/or time from character string.
如果您註釋掉WHERE APV.DateValue < GETDATE()
條款則沒有錯誤,我得到的300多行。當我啓用WHERE
子句時,出現錯誤。
因此,你要告訴我我的數據是正確的嗎?那是我的想法,所以我試圖找出數據中的問題所在,所以我開始使用TOP()
來隔離位置。問題一旦我使用TOP()
函數錯誤消失,我只有2000行數據開始。所以我在內部SELECT
上放了一個荒謬的TOP(99999999)
,現在整個查詢都起作用了。
內部SELECT
返回相同的行數(有或沒有TOP()
)。
爲什麼?
僅供參考,這是SQL的作品:
SELECT
*
FROM
(SELECT TOP(99999999)
A.Name, AP.PropertyName, APV.Value AS [PropertyValue],
CONVERT(DATETIME, APV.VALUE, 101) AS [DateValue]
FROM dbo.Account AS A
JOIN dbo.AccountProperty AS AP ON AP.AccountTypeId = A.AccountTypeId
JOIN dbo.AccountPropertyValue AS APV ON APV.AccountPropertyId = APV.AccountPropertyId
AND APV.AccountId = A.AccountId
WHERE
A.AccountTypeId = '19602AEF-27B2-46E6-A068-7E8C18B0DD75' --VENDOR
AND AP.PropertyName LIKE '%DATE%'
AND ISDATE(APV.Value) = 1
AND LEN(SUBSTRING(REVERSE(APV.Value), 0 , CHARINDEX('/', REVERSE(APV.Value)))) = 4
) AS APV
WHERE
APV.DateValue < GETDATE()
反對?很確定問題很清楚,有例子嗎?匿名投票的結果究竟是什麼? –
我看不到'WHERE APV.DateValue
我改變了我的地方...對不起,這是測試代碼...將更新帖子。 –