2014-11-07 4 views
0

У меня есть поле в базе данных с форматом DateTime.сравнить текущую дату в базе данных

Я хочу, чтобы сделать запрос, чтобы извлечь все строки, которые имеют этот день, но это поле в базе данных имеет следующий формат: 2014-11-07 21:21:22.733, я не хочу, чтобы проверить часы, секунды и минуты, мне нужно проверьте только день.

Я сделал это:

string query = @"SELECT * 
       FROM Orders 
       WHERE PrintTime is NULL 
        AND CONVERT(DATE, Datelogged) = @Datelogged 
       "; 
command.Parameters.AddWithValue("@Datelogged", DateTime.Today); 

, но я продолжал иметь пустые результаты.

+0

Я не вижу причины, которая не работает. Можете ли вы запустить его непосредственно в базе данных (без C#), если он работает? – gunr2171

+0

@ gunr2171 Когда я бегу прямо, я получил пустые результаты, я делаю это: 'SELECT * FROM Orders WHERE PrintTime NULL AND CONVERT (DATE, Datelogged) = '2014-07-11'' –

+1

Попробуйте (в sql direct), используя 'CONVERT (DATE, Datelogged) между '2014-07-11' и '2014-07-12'. Это не ответ, но это может помочь отладить это. – gunr2171

ответ

0

Попробуйте это:

Использование GETDATE() получить текущую дату и время с SQL Server.

string query = "SELECT * FROM Orders WHERE PrintTime is NULL AND CONVERT(DATE, Datelogged) = CONVERT(DATE,GETDATE())"; 
+0

Я пробовал ур ответить, у меня все еще есть пустые резултаты –

1

Вы не говорите, что тип данных ваша дата/столбец времени ("2014-11-07 21:21:22.733" просто текстовое представление данных в столбце).

Предполагая, что ваш DateLogged столбца определяется как datetime или datetime2, а не, скажем, varchar(32), вы можете сделать что-то вроде этого:

public DataTable Fetchorders(DateTime dt) 
{ 
    DataTable dt = new DataTable() ; 

    using (SqlConnection conn = new SqlConnection("...")) 
    using (SqlCommand cmd = conn.CreateCommand()  ) 
    using (SqlDataAdapter sda = new SqlDataAdapter(cmd) ) 
    { 
    string query = @" 
     SELECT o.* 
     FROM Orders o 
     WHERE o.DateLogged >= @date 
     and o.DateLogged < dateadd(day,1,@date) 
     " ; 

    cmd.CommandText = query ; 
    cmd.CommandType = CommandType.Text ; 
    cmd.Parameters.Add(
     new SqlParameter("@date" , dt.Date , SqlDbType.DateTime) 
     ) ; 

    conn.Open() ; 
    sda.Fill(dt) ; 
    conn.Close() ; 

    } 

    return dt ; 
} 

Вы хотите, чтобы избежать таких вещей, как convert(date,t.DateLogged), потому что превращает колонку в выражение и делает невозможным использование оптимизатором SQL Server любых покрывающих индексов. Поэтому вместо поиска строк, о которых идет речь, вы можете получить сканирование таблицы.

Смежные вопросы