У меня есть таблица TEST с DATETIME
полем, например:
ID NAME DATE
1 TESTING 2014-03-19 20:05:20.000
Мне нужен запрос, возвращающий эту строку и каждую строку с датой 19.03.2014, независимо от времени. Я пробовал использовать
select * from test where date = '03/19/2014';
Но он не возвращает строк. Единственный способ заставить его работать, который я нашел, - это также указать временную часть даты:
select * from test where date = '03/19/2014 20:03:02.000';
источник
DateDiff()
функция во всех ее вариантах вычисляет и возвращает количество границ дат, которые необходимо пересечь, чтобы перейти от одной даты к другой. Вот почемуDateDiff(day, '1Jan2016', '31Dec2017 23:259:59')
иDateDiff(day, '31Dec2016 23:259:59', '1Jan2017 ')
оба возвращаются1
.Простой ответ;
select * from test where cast ([date] as date) = '03/19/2014';
источник
Я использую MySQL 5.6, и есть функция DATE для извлечения только части даты из даты и времени. Итак, простое решение вопроса -
select * from test where DATE(date) = '2014-03-19';
http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html
источник
select * from test where date between '03/19/2014' and '03/19/2014 23:59:59'
Это действительно плохой ответ. По двум причинам.
1. Что происходит со временем вроде 23.59.59.700 и т. Д. Бывают времена больше 23:59:59 и следующего дня.
2. Поведение зависит от типа данных. Для типов datetime / date / datetime2 запрос ведет себя по-разному.
Тестирование с 23: 59: 59.999 делает его еще хуже, потому что в зависимости от типа даты вы получаете разные округления.
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'))
- Для даты значение «нарезано». - Для datetime значение округляется до следующей даты. (Ближайшее значение). - Для datetime2 значение точное.
источник
Это работает для меня для сервера MS SQL:
select * from test where year(date) = 2015 and month(date) = 10 and day(date)= 28 ;
источник
Попробуй это
select * from test where Convert(varchar, date,111)= '03/19/2014'
источник
ты можешь попробовать это
select * from test where DATEADD(dd, 0, DATEDIFF(dd, 0, date)) = '03/19/2014';
источник
Вы можете использовать этот подход, который усекает временную часть:
select * from test where convert(datetime,'03/19/2014',102) = DATEADD(dd, DATEDIFF(dd, 0, date), 0)
источник
-- Reverse the date format -- this false: select * from test where date = '28/10/2015' -- this true: select * from test where date = '2015/10/28'
источник
Просто используйте это в своем
WHERE
предложении.Часть «SubmitDate» ниже - это имя столбца, поэтому вставьте свое собственное.
Это вернет только часть результатов "Год", минуя минуты и т. Д.
источник
select *, cast ([col1] as date) <name of the column> from test where date = 'mm/dd/yyyy'
"col1" - это имя столбца с датой и временем
<имя столбца> здесь вы можете изменить имя по желанию
источник
select * from invoice where TRUNC(created_date) <=TRUNC(to_date('04-MAR-18 15:00:00','dd-mon-yy hh24:mi:ss'));
источник
Существует проблема с датами и языками, и способ избежать этого - запросить даты в этом формате ГГГГММДД.
Этот способ ниже должен быть самым быстрым согласно ссылке ниже. Я проверил в SQL Server 2012 и согласен со ссылкой.
select * from test where date >= '20141903' AND date < DATEADD(DAY, 1, '20141903');
источник
использовать это
select * from TableName where DateTimeField > date() and DateTimeField < date() + 1
источник
Протестируйте этот запрос.
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
источник
select * from invoice where TRANS_DATE_D>= to_date ('20170831115959','YYYYMMDDHH24MISS') and TRANS_DATE_D<= to_date ('20171031115959','YYYYMMDDHH24MISS');
источник
SELECT * FROM test where DATEPART(year,[TIMESTAMP]) = '2018' and DATEPART(day,[TIMESTAMP]) = '16' and DATEPART(month,[TIMESTAMP]) = '11'
источник