2010-12-05 17 views
1

Wie überprüft man, ob 2 Daten in einem SQL-Skript gleich sind?Daten in SQL Server vergleichen

Der Wert vom vorderen Ende vergangen ist ‚2010-12-04 22.14.49‘ und das Datum in der Tabelle ist ‚2010-12-04 22: 14: 49,253‘

ich nicht kümmern sich um die Millisekunde. Ich habe versucht, diesen

DATEDIFF(SS,'2010-12-04 22:14:49','2010-12-04 22:14:49.253') = 0 

und bekam den folgenden Fehler

Die datediff Funktion in einem Überlauf geführt. Die Anzahl der Datenteile , die zwei Datum/Uhrzeit-Instanzen trennt, ist zu groß. Versuchen Sie, datediff mit einem weniger genauen Datumsteil zu verwenden.

+1

Ich bekomme diesen Fehler nicht mit Ihrer Probe. –

Antwort

2

Auf meinem SQL Server (2008 R2) dieser Ausschnitt von T-SQL-Code funktioniert gut ....

Sind Sie sicher, dass Sie nicht irgendwie einen Tippfehler (zB 1010-12-04......) Ihre Daten eingeführt haben , so dass die Entfernung zwischen den beiden Daten wirklich sehr groß wäre ??

Dann ist die Anzahl der Sekunden zwischen ihnen konnte in der Tat Überlauf auch große Zahlenbereich von SQL Server - und das ist genau das, was die Fehlermeldung sagt ...

+0

Danke, es gab einen Tippfehler. Es besteht die Möglichkeit, dass ein Benutzer versucht, nach Daten mit einer längeren Lücke zu suchen. Wie verhindere ich in diesem Fall diesen Fehler? – dotnetrocks

+0

@Dotetrocks: vielleicht sollten Sie für DATEDIFF mit z. TAG zuerst - wenn es weniger als ein Tag Unterschied ist, dann können Sie mit SEKUNDEN überprüfen. Oder fangen Sie einfach die Ausnahme - wenn es passiert, sind die Daten offensichtlich ziemlich auseinander. –

2

Verwenden Sie das in einer WHERE Klausel gegen eine datetime Spalte?

Wenn so verwenden nur

DECLARE @d DATETIME = '2010-12-04 22:14:49.000' 

SELECT .... 
WHERE YourCol >= @d AND YourCol < DATEADD(SECOND,1,@d) 

Dies wird auf jeden Fall mehr sargable und effizient sein.

+0

gibt es eine Möglichkeit, die Sekunden aus dem Datum zu entfernen. Dann kann ich einen Eins-zu-eins-Vergleich machen – dotnetrocks

+1

Wahrscheinlich. Wenn Sie eine Funktion auf die Spalte anwenden, um die Sekunden zu entfernen, garantieren Sie, dass ein Index nicht verwendet werden kann, um diese Abfrage zu erfüllen, und Sie werden die gesamte Tabelle scannen.Meine Frage, wie sie geschrieben wurde, kann mit einer Bereichssuche erfüllt werden. –

+0

@dotnetrocks Sie können Millisekunden von Ihrem Parameter mit SET @d = DATEADD entfernen (MS, -DATEPART (MS, @ d), @ d) –

0

Dies entfernt die Sekunden ab den

where convert (varchar(10), @date1, 108) + ' ' + CONVERT(varchar(5), @date1, 108) = convert (varchar(10), @date2, 108) + ' ' + CONVERT(varchar(5), @date2, 108) 
0

Guss jeder der Datetime-Werte wie im folgenden Beispiel:

declare @stuff as datetime 
set @stuff = getdate() 
select @stuff 
SELECT CONVERT(VARCHAR(26), @stuff, 120) 

Output =

2010-12-05 16:17:49.720 

und

2010-12-05 16:17:49 

Die Konvertierung in den Typ 120 enthält keine Millisekunden. Geben Sie LINK für andere Arten von Konvertierungen ein.

Verwandte Themen