Сравните строку даты с датой и временем в SQL Server? - PullRequest
39 голосов
/ 14 августа 2008

В SQL Server у меня есть столбец DATETIME, который включает элемент времени.

Пример:

'14 AUG 2008 14:23:019'

Каков лучший метод для выбора записей только для определенного дня, игнорируя часть времени?

Пример: (небезопасно, так как не соответствует временной части и не возвращает строк)

DECLARE  @p_date DATETIME
SET      @p_date = CONVERT( DATETIME, '14 AUG 2008', 106 )

SELECT *
FROM   table1
WHERE  column_datetime = @p_date

Примечание. Учитывая, что этот сайт также посвящен написанию заметок и приемов, которые вы выбираете, а затем забываете, я собираюсь опубликовать свой собственный ответ на этот вопрос, поскольку материал DATETIME в MSSQL, вероятно, является темой, которую я больше всего ищу в SQLBOL.


Обновление Уточненный пример, чтобы быть более конкретным.


Редактировать Извините, но мне пришлось преуменьшить НЕПРАВИЛЬНЫЕ ответы (ответы, которые возвращают неправильные результаты).

@ Jorrit: WHERE (date>'20080813' AND date<'20080815') вернется 13-го и 14-го.

@ wearejimbo: Близко, но без сигары! Знак вручен вам. Вы пропустили записи, написанные в 14/08/2008 с 23: 59: 001 до 23: 59: 999 (т. Е. Менее чем за 1 секунду до полуночи.)

Ответы [ 18 ]

1 голос
/ 16 февраля 2010
DECLARE @Dat

SELECT * 
FROM Jai
WHERE                                                                                                          
CONVERT(VARCHAR(2),DATEPART("dd",Date)) +'/'+                                                              
             CONVERT(VARCHAR(2),DATEPART("mm",Date)) +'/'+              
                     CONVERT(VARCHAR(4), DATEPART("yy",Date)) = @Dat
1 голос
/ 14 августа 2008
SELECT  *
FROM    table1
WHERE   CONVERT(varchar(10),columnDatetime,121) = 
        CONVERT(varchar(10),CONVERT('14 AUG 2008' ,smalldatetime),121)

Это преобразует время данных и строку в varchars формата "YYYY-MM-DD".

Это очень некрасиво, но должно работать

1 голос
/ 14 августа 2008

Я знаю, что это не совсем то, что вы хотите сделать, но это может быть началом:

SELECT *
FROM (SELECT *, DATEPART(yy, column_dateTime) as Year, 
      DATEPART(mm, column_dateTime) as Month, 
      DATEPART(dd, column_dateTime) as Day 
      FROM table1)
WHERE Year = '2008'
AND Month = '8'
AND Day = '14'
0 голосов
/ 30 января 2012
SELECT * FROM tablename
WHERE CAST(FLOOR(CAST(column_datetime AS FLOAT))AS DATETIME) = '30 jan 2012'
0 голосов
/ 03 апреля 2010

В sqlserver

DECLARE @p_date DATE

SELECT * 
FROM table1
WHERE column_dateTime=@p_date

В C # Передайте короткую строку значения даты, используя функцию ToShortDateString (). образец: DateVariable.ToShortDateString ();

0 голосов
/ 23 мая 2015

Лучший способ - просто извлечь часть даты с помощью функции SQL DATE ():

SELECT * 
FROM table1
WHERE DATE(column_datetime) = @p_date;
0 голосов
/ 07 марта 2016

Существует множество форматов даты в SQL, которые указываются. См. https://msdn.microsoft.com/en-in/library/ms187928.aspx

Преобразование и сравнение столбца varchar с выбранными датами.

Синтаксис:

SELECT * FROM tablename where CONVERT(datetime,columnname,103) 
    between '2016-03-01' and '2016-03-03'
In CONVERT(DATETIME,COLUMNNAME,103) "103" SPECIFIES THE DATE FORMAT as dd/mm/yyyy
0 голосов
/ 16 февраля 2010
SELECT CONVERT(VARCHAR(2),DATEPART("dd",doj)) + 
    '/' + CONVERT(VARCHAR(2),DATEPART("mm",doj)) + 
    '/' + CONVERT(VARCHAR(4),DATEPART("yy",doj)) FROM emp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...