в MySQL
select * from record where register_date like '2009-10-10%'
Каков синтаксис SQL Server?
Спасибо.
в MySQL
select * from record where register_date like '2009-10-10%'
Каков синтаксис SQL Server?
Спасибо.
Вы можете использовать функцию DATEPART()
SELECT * FROM record
WHERE (DATEPART(yy, register_date) = 2009
AND DATEPART(mm, register_date) = 10
AND DATEPART(dd, register_date) = 10)
Я считаю, что этот способ легко читается, поскольку он игнорирует компонент времени, и вам не нужно использовать дату следующего дня, чтобы ограничить ваш выбор. Вы можете перейти к большей или меньшей детализации, добавив дополнительные предложения, используя соответствующий код DatePart, например.
AND DATEPART(hh, register_date) = 12)
чтобы получить записи между 12 и 1.
Проконсультируйтесь с документами MSDN DATEPART для полного списка допустимых аргументов.
Нет прямой поддержки оператора LIKE для переменных DATETIME, но вы всегда можете отнести DATETIME к VARCHAR:
SELECT (list of fields) FROM YourTable
WHERE CONVERT(VARCHAR(25), register_date, 126) LIKE '2009-10-10%'
Проверьте документы MSDN для получения полного списка доступных "стилей" в функции CONVERT.
Марк
Если вы это сделаете, вы вынуждаете его выполнять преобразование строк. Было бы лучше построить диапазон дат начала и окончания и использовать:
declare @start datetime, @end datetime
select @start = '2009-10-10', @end = '2009-11-10'
select * from record where register_date >= @start
and register_date < @end
Это позволит использовать индекс (если он есть на register_date
), а не сканирование таблицы.
Вы можете использовать CONVERT для получения даты в текстовой форме. Если вы преобразуете его в varchar (10), вы можете использовать = вместо следующего:
select *
from record
where CONVERT(VARCHAR(10),register_date,120) = '2009-10-10'
Или вы можете использовать верхнюю и нижнюю граничные даты с дополнительным преимуществом, чтобы он мог использовать индекс:
select *
from record
where '2009-10-10' <= register_date
and register_date < '2009-10-11'
К сожалению, невозможно сравнить datetime с varchar, используя 'LIKE' Но желаемый выход возможен по-другому.
select * from record where datediff(dd,[record].[register_date],'2009-10-10')=0
Вы также можете использовать преобразование, чтобы сделать поиск по дате, используя LIKE. Например,
select convert(VARCHAR(40),create_date,121) , * from sys.objects where convert(VARCHAR(40),create_date,121) LIKE '%17:34%'
Существует очень слабое освещение оператора LIKE для дат в SQL Server. Он работает только с использованием американского формата даты. В качестве примера вы можете попробовать:
... WHERE register_date LIKE 'oct 10 2009%'
Я тестировал это в SQL Server 2005, и он работает, но вам действительно нужно попробовать разные комбинации. Нечетные вещи, которые я заметил, следующие:
Похоже, вы получаете все или ничего для разных подполей в дате, например, если вы ищете "apr 2%", вы получаете только что-либо в 20-м - он пропускает 2-й.
Использование одного символа подчеркивания '_' для представления одиночного (группового) символа не работает полностью, например WHERE mydate LIKE 'oct _ 2010%'
будет не возвращать все даты до 10-го - он вообще ничего не возвращает, на самом деле!
Формат жестко американец: 'mmm dd yyyy hh:mm
'
Мне было сложно скрыть процесс для LIKEing секунд, поэтому, если кто-то захочет принять это немного дальше, будьте моим гостем!
Надеюсь, что это поможет.
Оператор LIKE
не работает с частями даты, такими как месяц или дата, но оператор DATEPART
делает.
Команда, чтобы узнать все учетные записи, дата открытия которых была первой:
SELECT *
FROM Account
WHERE DATEPART(DAY, CAST(OpenDt AS DATE)) = 1`
* CASTING OpenDt
, потому что это значение находится в DATETIME
, а не только DATE
.
Я решил свою проблему таким образом. Благодарим вас за предложения по улучшению. Пример в С#.
string dd, mm, aa, trc, data;
dd = nData.Text.Substring(0, 2);
mm = nData.Text.Substring(3, 2);
aa = nData.Text.Substring(6, 4);
trc = "-";
data = aa + trc + mm + trc + dd;
"Select * From bdPedidos Where Data Like '%" + data + "%'";