2009-03-30 7 views

Antwort

7

Wenn Sie in

setzen
SELECT * FROM Users WHERE RegistrationDate >= '1/20/2009' 

wird die Zeichenfolge '1/20/2009' automatisch in das Format DateTime für ein Datum vonkonvertiert. Wenn Sie also >= verwenden, sollten Sie jeden Benutzer erhalten, dessen Registrierungsdatum der 20.01.2009 oder jünger ist.

Edit: Ich habe dies in den Kommentar-Abschnitt, aber ich sollte wahrscheinlich auch hier verlinken. Dies ist ein Artikel einige mehr in die Tiefe Arbeitsweisen mit Datetime ist in Ihnen abfragt Detaillierung: http://www.databasejournal.com/features/mssql/article.php/2209321/Working-with-SQL-Server-DateTime-Variables-Part-Three---Searching-for-Particular-Date-Values-and-Ranges.htm

+0

Weitere Informationen zu DateTime-Datentypen und SQL Server-Abfragen finden Sie hier: http://www.databasejournal.com/features/mssql/article.php/2209321/Working-with-SQL-Server-DateTime-Variables -Part-Three --- Suche nach-Datum-Werte-und-Ranges.htm – TheTXI

1
Select * from Users where RegistrationDate >= CONVERT(datetime, '01/20/2009', 103) 

sicher zu verwenden ist, unabhängig von den Datumseinstellungen auf dem Server.

Die vollständige Liste der Stile finden Sie here.

0

ich den Filter Datum in ein Datetime immer bekommen, ohne Zeit (Zeit = 00: 00: 00,000)

DECLARE @FilterDate datetime --final destination, will not have any time on it 
DECLARE @GivenDateD datetime --if you're given a datetime 
DECLARE @GivenDateS char(23) --if you're given a string, it can be any valid date format, not just the yyyy/mm/dd hh:mm:ss.mmm that I'm using 

SET @GivenDateD='2009/03/30 13:42:50.123' 
SET @GivenDateS='2009/03/30 13:42:50.123' 

--remove the time and assign it to the datetime 
@FilterDate=dateadd(dd, datediff(dd, 0, @FilterDateD), 0) 
--OR 
@FilterDate=dateadd(dd, datediff(dd, 0, @FilterDateS), 0) 

Sie können diese WHERE-Klausel verwenden, um dann zu filtern:

WHERE ColumnDateTime>[email protected] AND ColumnDateTime<@FilterDate+1 

Dies gibt alle Spiele, die am oder nach dem Beginn des Tages am 30.03.2009 sind, bis einschließlich des kompletten Tages am 30.03.2009

Sie können das gleiche für START und END Filterparameter wie Gut. Geben Sie für das Startdatum immer ein Datum und an dem gewünschten Tag die Nullzeit ein, und geben Sie die Bedingung "> =" an. Geben Sie immer das Enddatum die Nullzeit am nächsten Tag ein und verwenden Sie "<". Auf diese Weise werden Sie immer alle Daten korrekt angeben, unabhängig von der Zeit des Datums.

0

Ein weiteres Merkmal ist zwischen:

Select * from table where date between '2009/01/30' and '2009/03/30' 
0

, wenn Sie durch das Datumsformat gestört werden nicht wollen, können Sie die Spalte mit dem allgemeinen Datumsformat vergleichen könnten zum Beispiel

select * From table where cast (RegistrationDate as date) between '20161201' and '20161220'

Stellen Sie sicher, dass das Datum im Format DATE ist, andernfalls cast (col as DATE)

1
select sysdate from dual 
30-MAR-17 

select count(1) from masterdata where to_date(inactive_from_date,'DD-MON-YY' 
between '01-JAN-16' to '31-DEC-16' 

12998 rows 
+0

vielen Dank "Pang" für die Bearbeitung meines Kommentars, –

Verwandte Themen