2016-07-22 25 views
0

Ich versuche, einen Datetime-Wert an eine gespeicherte proc-Abfrage übergeben, wo es gegen eine Spalte, die auch ein Datetime-Feld ist, überprüft wird.Sybase (ASE) DATETIME-Feld in where-Klausel für genaue Übereinstimmung

wir ein Beispiel sagen, dass ich eine Tabelle, die hat:

ProductID int 
ProductName varchar(20) 
InsertDate DateTime 

Jetzt schreibe ich eine gespeicherte Prozedur:

Create proc usp_GetProductsByInsertDate 
@input_insertDate datetime 
as 
select * from Products where InsertDate = @input_insertDate 

Nun, wenn ich @input_insertDate = '07/01/2016 06:25:15 PM' passieren, sollte es mir bringen die Liste von Produkten, die genau zu dieser Zeit eingefügt wurde, aber das passiert nicht. Ich könnte so setzen haben, unter dem das Ergebnis zurückgibt:

select * from Products where InsertDate >= @input_insertDate 

Ich würde das „Datum und Uhrzeit“ in dem claue Feld verwenden möchten. Kann ich das benutzen? Dies könnte eine dumme Frage sein, aber ich würde gerne wissen, warum es nicht funktioniert. Bitte lass mich wissen wie.

Antwort

0

Können Sie überprüfen, ob die Werte in Ihrer Zielspalte InsertDate Millisekunden (> 0) für die erwarteten übereinstimmenden Zeilen enthält. Einige Datenbank-IDEs in den Standardeinstellungen verbergen die Millisekunden (Ihr @input_insertDate hat keine Millisekunden), die eine solche Verwirrung verursachen können. Ihre Abfrage sieht gut aus, Sie können eine datepart(ms, InsertDate) auf Ihre erwarteten Zeilen überprüfen.

+0

nein, ich weiß nicht, so ist es mit datepart verwandt und es gibt keine Millisekunden in meiner Zielspalte – superachu

+0

Können Sie einige Daten, die Sie mit Datepart für Millisekunden-Werte erwarten, veröffentlichen? – Neeraj

0

Ich glaube, das Problem ist mit der Übergabe des Datums als Zeichenfolge in der Abfrage oder Parameter während EXEC die gespeicherte Prozedur. Sieht so aus, als ob es keinen Stringwert für eine exakte Datetime-Übereinstimmung mag. Wenn das date-Objekt intern innerhalb der Prozedur übergeben wird, stimmt es überein und gibt das Ergebnis zurück, dh wenn wir eine Tabelle nach einem Feld mit "datetime" abfragen, weisen wir dieses einer Variablen zu und übergeben diese an die nächste Abfrage für die exakte Übereinstimmung , dann klappt es. Ist es nicht komisch?

Verwandte Themen