2017-04-06 51 views
0

我有一個視圖,我試圖查詢。無法過濾視圖(日期類型轉換錯誤)

Select top 100 Expiration , year(Expiration) from CICPROD.ExpiredLots 

--where year(Expiration) = 2017 

返回(當我編輯了WHERE部分):

Expiration (No column name) 
2017-09-10 2017 
2021-06-20 2021 
2017-01-16 2017 
2017-01-04 2017 
2017-08-22 2017 
2017-01-25 2017 
2021-07-18 2021 
2017-04-28 2017 
2017-09-14 2017 
2017-01-04 2017 
2010-06-10 2010 
2020-04-24 2020 
2019-03-03 2019 
2020-09-11 2020 
2020-06-10 2020 
2020-03-26 2020 
2020-07-14 2020 
2017-05-13 2017 
2018-02-16 2018 
2015-05-25 2015 
2015-08-29 2015 
2016-04-04 2016 
2017-03-31 2017 
2017-03-31 2017 
2017-03-31 2017 
2015-08-15 2015 
2018-02-27 2018 
2018-02-16 2018 
2016-01-31 2016 
2017-03-31 2017 
2014-02-01 2014 
2018-08-09 2018 
2007-08-01 2007 
2017-05-27 2017 
2020-12-15 2020 
2012-03-31 2012 
2012-03-22 2012 
2016-01-05 2016 
2018-01-10 2018 
2013-03-05 2013 
2015-08-05 2015 
2017-11-30 2017 
2013-06-12 2013 
2019-11-22 2019 
2013-04-27 2013 
2016-04-17 2016 
2018-01-10 2018 
2018-02-16 2018 
2018-01-10 2018 
2018-02-16 2018 
2016-04-30 2016 
2020-01-05 2020 
2016-12-21 2016 
2017-11-08 2017 
2018-01-10 2018 
2014-09-14 2014 
2018-01-10 2018 
2016-06-25 2016 
2014-01-31 2014 
2020-03-20 2020 
2017-02-15 2017 
2016-02-01 2016 
2015-08-05 2015 
2016-03-24 2016 
2013-08-28 2013 
2016-09-08 2016 
2018-02-16 2018 
2014-12-09 2014 
2017-08-13 2017 
2018-01-10 2018 
2016-10-23 2016 
2018-02-17 2018 
2009-05-28 2009 
2017-07-12 2017 
2017-03-31 2017 
2016-04-23 2016 
2015-04-11 2015 
2018-01-10 2018 
2017-11-17 2017 
2018-01-10 2018 
2017-11-08 2017 
2017-11-08 2017 
2017-03-31 2017 
2017-03-31 2017 
2017-10-02 2017 
2011-05-03 2011 
2010-12-10 2010 
2014-11-14 2014 
2017-08-17 2017 
2015-06-30 2015 
2017-10-12 2017 
2016-03-23 2016 
2018-05-10 2018 
2017-08-17 2017 
2017-01-01 2017 
2015-12-19 2015 
2016-02-28 2016 
2018-02-27 2018 
2017-07-07 2017 
2016-09-08 2016 

然而,當我試圖篩選與第2列,其中說2017年,我得到錯誤信息:

Msg 241,Level 16,State 1,Line 1 從字符串中轉換日期和/或時間時轉換失敗。

但是,當我嘗試與TOP 10,查詢工作沒有問題!

我檢查了字段的長度,他們都是10,並具有相同的格式,所以我想知道爲什麼會發生這種情況。

任何人都可以協助?

原來的查詢是:

Select cast([STOLOTFCY].ITMREF_0 as varchar(20)) as 'Product', 

[ITMMASTER].ITMDES1_0 as 'Desc1', 

[STOLOTFCY].STOFCY_0 as Site, cast([STOLOTFCY].LOT_0 as varchar(30)) as Lot , 

[STOCK].STA_0 as Status, 

(case when isdate([STOLOT].USRFLD1_0) = 0 then null else 

convert(date,[STOLOT].USRFLD1_0,101) end) as Expiration, 

[STOCK].QTYSTU_0 as 'Total Stk', 

    [ITMMASTER].STU_0 as 'STK', [STOLOTFCY].AVC_0 as 'avgcost' , 

    [STOLOTFCY].AVC_0 * [STOCK].QTYSTU_0 as 'ExtendedValue' , 

    cast([STOLOT].LOTCREDAT_0 as date) as 'Lotcreated', 

    [ITMMASTER].ITMWEI_0 * [STOCK].QTYSTU_0 as 'TotalWgt(Kg)' 
from [CICPROD].[STOLOTFCY] 
inner join [CICPROD].[ITMMASTER] on [STOLOTFCY].ITMREF_0 = [ITMMASTER].ITMREF_0 
inner join [CICPROD].[STOLOT] on [STOLOT].ITMREF_0 = [STOLOTFCY].ITMREF_0 and [STOLOT].LOT_0 = [STOLOTFCY].LOT_0 
inner join [CICPROD].[STOCK] on [STOCK].ITMREF_0 = [STOLOTFCY].ITMREF_0 and [STOLOTFCY].STOFCY_0 = [STOCK].STOFCY_0 and [STOCK].LOT_0 = 
[STOLOTFCY].LOT_0 and [STOLOTFCY].SLO_0 = [STOCK].SLO_0 
where [STOLOTFCY].[AAACUMQTY_0] + [STOLOTFCY].[QQQCUMQTY_0] + [STOLOTFCY].[RRRCUMQTY_0] > 0 
+0

此外,當我嘗試運行ISDATE()函數來查看是否有任何值,導致錯誤投擲,我得到這樣的:消息8116,級別16,狀態1,行1個 參數的數據類型日期isdate函數的參數1無效。 –

+0

你可以嘗試從* CICPROD.ExpiredLots' – LONG

+0

工作,但選擇*,年(到期),但過濾不起作用的where子句。我想也許這是從視圖本身的源代碼,但這一直困惑我整天 –

回答

1

根據通過的意見,我認爲下面的代碼應該幫助你發現這是導致查詢失敗數據的討論。

SET DATEFORMAT mdy; 
select 
[STOLOT].USRFLD1_0, * 
from 
CICPROD.STOLOT 
WHERE 
ISDATE([STOLOT].USRFLD1_0)= 0 and [STOLOT].USRFLD1_0 is not null 
+0

該代碼將返回您的問題記錄,但也可能是其他沒有問題的記錄。如果太多,我們需要添加步驟來比較輸出與使用默認設置「DATEFORMAT」時的輸出。 –

+0

謝謝!哦,我的上帝,這很令人沮喪。我發現5000行中有一行導致了轉換錯誤。我認爲現在很好。 –

0

試試這個:

Select top 100 Expiration , year(Expiration) from CICPROD.ExpiredLots 
where year(cast(Expiration as date)) = 2017 
+0

我試過它仍然會拋出錯誤。這可能是因爲該字段的源代碼是字母數字字段,該字段被轉換爲日期字段。 –

相關問題