Mam tabelę TEST z DATETIME
polem takim jak ta:
ID NAME DATE
1 TESTING 2014-03-19 20:05:20.000
Czego potrzebuję zapytania zwracającego ten wiersz i każdy wiersz z datą 19.03.2014, bez względu na godzinę. Próbowałem użyć
select * from test where date = '03/19/2014';
Ale nie zwraca żadnych wierszy. Jedynym sposobem, aby to zadziałało, jest podanie godziny w dacie:
select * from test where date = '03/19/2014 20:03:02.000';
źródło
DateDiff()
funkcja we wszystkich swoich wariantach oblicza i zwraca liczbę granic dat, które należy przekroczyć, aby uzyskać frlom jedną datę do drugiej. DlategoDateDiff(day, '1Jan2016', '31Dec2017 23:259:59')
iDateDiff(day, '31Dec2016 23:259:59', '1Jan2017 ')
oboje wracają1
.Prosta odpowiedź;
select * from test where cast ([date] as date) = '03/19/2014';
źródło
Używam MySQL 5.6 i jest funkcja DATE, aby wyodrębnić tylko część daty z daty i godziny. Zatem proste rozwiązanie tego pytania brzmi:
select * from test where DATE(date) = '2014-03-19';
http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html
źródło
select * from test where date between '03/19/2014' and '03/19/2014 23:59:59'
To naprawdę zła odpowiedź. Z dwóch powodów.
1. Co dzieje się z czasami 23.59.59.700 itd. Są czasy większe niż 23:59:59 i następny dzień.
2. Zachowanie zależy od typu danych. Zapytanie zachowuje się inaczej w przypadku typów datetime / date / datetime2.
Testowanie z 23: 59: 59.999 sprawia, że jest jeszcze gorzej, ponieważ w zależności od typu danych otrzymujesz różne zaokrąglenia.
select convert (varchar(40),convert(date , '2014-03-19 23:59:59.999')) select convert (varchar(40),convert(datetime , '2014-03-19 23:59:59.999')) select convert (varchar(40),convert(datetime2 , '2014-03-19 23:59:59.999'))
- W przypadku daty wartość jest „posiekana”. - W przypadku daty i godziny wartość jest zaokrąglana w górę do następnej daty. (Najbliższa wartość). - Dla datetime2 wartość jest dokładna.
źródło
To działa dla mnie na serwerze MS SQL:
select * from test where year(date) = 2015 and month(date) = 10 and day(date)= 28 ;
źródło
Spróbuj tego
select * from test where Convert(varchar, date,111)= '03/19/2014'
źródło
możesz tego spróbować
select * from test where DATEADD(dd, 0, DATEDIFF(dd, 0, date)) = '03/19/2014';
źródło
Możesz użyć tego podejścia, które skraca część czasu:
select * from test where convert(datetime,'03/19/2014',102) = DATEADD(dd, DATEDIFF(dd, 0, date), 0)
źródło
-- Reverse the date format -- this false: select * from test where date = '28/10/2015' -- this true: select * from test where date = '2015/10/28'
źródło
Po prostu użyj tego w swojej
WHERE
klauzuli.Część „SubmitDate” poniżej to nazwa kolumny, więc wstaw własną.
Spowoduje to zwrócenie tylko części wyników „Rok”, z pominięciem minut itp.
źródło
select *, cast ([col1] as date) <name of the column> from test where date = 'mm/dd/yyyy'
„col1” to nazwa kolumny z datą i godziną
<nazwa kolumny> tutaj możesz zmienić nazwę według potrzeb
źródło
select * from invoice where TRUNC(created_date) <=TRUNC(to_date('04-MAR-18 15:00:00','dd-mon-yy hh24:mi:ss'));
źródło
Występuje problem z datami i językami, a sposobem na uniknięcie tego jest pytanie o daty w tym formacie RRRRMMDD.
Ten sposób poniżej powinien być najszybszy zgodnie z poniższym linkiem. Sprawdziłem w SQL Server 2012 i zgadzam się z linkiem.
select * from test where date >= '20141903' AND date < DATEADD(DAY, 1, '20141903');
źródło
Użyj tego
select * from TableName where DateTimeField > date() and DateTimeField < date() + 1
źródło
Przetestuj to zapytanie.
SELECT *,DATE(chat_reg_date) AS is_date,TIME(chat_reg_time) AS is_time FROM chat WHERE chat_inbox_key='$chat_key' ORDER BY is_date DESC, is_time DESC
źródło
select * from invoice where TRANS_DATE_D>= to_date ('20170831115959','YYYYMMDDHH24MISS') and TRANS_DATE_D<= to_date ('20171031115959','YYYYMMDDHH24MISS');
źródło
SELECT * FROM test where DATEPART(year,[TIMESTAMP]) = '2018' and DATEPART(day,[TIMESTAMP]) = '16' and DATEPART(month,[TIMESTAMP]) = '11'
źródło