2017-04-06 2 views
0

Ich habe eine Ansicht, für die ich versuche abzufragen.kann eine Ansicht nicht filtern (DateType-Konvertierungsfehler)

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

--where year(Expiration) = 2017 

die zurückgibt (wenn ich den WHERE Teil bearbeiten out):

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 

aber wenn ich versuche, 2, um die in dem mit Spalte zu filtern 2017 zu sagen, erhalte ich die Fehlermeldung:

Msg 241, Ebene 16, Status 1, Zeile 1 Konvertierung fehlgeschlagen, wenn Datum und/oder Uhrzeit aus Zeichenkette konvertiert werden.

Aber als ich es mit TOP 10 probiert habe, hat die Abfrage kein PROBLEM !!

Ich überprüfte die Länge des Feldes und sie sind alle 10 und haben das gleiche Format, also frage ich mich, warum das passiert.

Kann jemand helfen ??

Original-Query ist:

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

Auch wenn ich versuche, die isdate() Funktion, um zu sehen zu laufen, wenn alle Werte den Fehlerwurf verursachen, bekomme ich diese: Msg 8116, Ebene 16, Status 1, Zeile 1 Argument Datentyp Datum ist ungültig für Argument 1 der Isdate-Funktion. –

+0

könnten Sie 'Select *, Jahr (Ablauf) von CICPROD.ExpiredLots' – LONG

+0

versuchen, die funktioniert, aber die Filterung funktioniert nicht in der Where-Klausel. Ich denke, es ist vielleicht der Quellcode aus der Sicht selbst, aber das hat mich den ganzen Tag verwirrt –

Antwort

1

Auf Grundlage der Diskussion über Kommentare Ich denke, der folgende Code sollten Sie die Daten finden, die die Abfrage fehlschlagen verursacht.

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

Dieser Code wird Ihre Problemdatensätze zurückgeben, aber möglicherweise auch andere, die nicht problematisch sind. Wenn es zu viele gibt, müssen wir Schritte hinzufügen, um die Ausgabe mit der zu vergleichen, wenn Sie Ihre Standardeinstellung für 'DATEFORMAT' verwenden. –

+0

DANKE! Oh mein Gott, das war so frustrierend. Ich fand, dass es eine Zeile von 5000 war, die den Umwandlungsfehler verursachte. Ich denke, es ist jetzt gut. –

0

Try this:

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

Ich habe versucht, dass es immer noch den Fehler wirft. Es könnte sein, dass der Quellcode für dieses Feld ein alphanumerisches Feld ist, das in ein Datumsfeld konvertiert wird. –

Verwandte Themen