Как я могу настроить формат даты - PullRequest
2 голосов
/ 05 августа 2010

Один из столбцов моей таблицы с именем «SetDate» типа DateTime выглядит как:

2010-08-02 02:55:58.420

Формат DateTime из приложения выглядит так:

2/11/2010

Проблема:

Я передаю SQL-запрос к БД через приложение. В запросе есть предложение WHERE который сравнивает SetDate с датой из приложения.

Столбец SetDate содержит этот формат: 2010-08-02 02:55:58.420
Дата, переданная из заявки, имеет следующий формат: 3/12/2010

Мне просто нужно сравнить две даты без времени 2010-08-02 и 3/12/2010.
Поскольку они в разных форматах, я не получаю никаких записей из базы данных.

Я использую C # и T-SQL.

Есть идеи?

Ответы [ 5 ]

2 голосов
/ 05 августа 2010

Используете ли вы SqlCommand для выполнения запроса?

Да?Также используйте SqlParameters для ваших пользователей / системного ввода.

var setDate = DateTime.Now();

using (SqlCommand command = new SqlCommand("SELECT * FROM TableX WHERE SetDate > @SetDate", connection))
{
    // Add new SqlParameter to the command.
    command.Parameters.Add(new SqlParameter("@SetDate", SqlDbType.DateTime, setDate));
    // Read in the SELECT results.
    SqlDataReader reader = command.ExecuteReader();
    //More code
}
1 голос
/ 05 августа 2010

Для вас предложение WHERE для DATETIME в базе данных, вам нужно сделать что-то вроде этого. CONVERT (DATETIME, CONVERT (VARCHAR (11), '2010-08-02 02: 55: 58.420'))

0 голосов
/ 05 августа 2010

Лучший способ выполнить запросы БД из кода - это вызывать хранимые процедуры, если это возможно. Однако, независимо от того, делаете вы это или нет, вы захотите использовать объект SqlParameter, инициализированный с нужной вам датой.

DateTime dateToCheck = DateTime.Now;
using(SqlCommand cmd //Set Command Here)
{
  cmd.CommandType = SqlCommandType.Procedure;
   //Doing this from memory, but that line should be pretty close
  cmd.Parameters.AddWithValue("@dateToCheck", dateToCheck);

  //Continue with call to DB as normal
}

Один не здесь, некоторые люди указывают тип «DateTime» на их SqlParameter объекте, но я никогда не делал этого, и он пока не вернулся, чтобы укусить меня. Я считаю (опять же, работая здесь без памяти), что если вы используете тип System. [Что угодно], SqlParameter может автоматически назначить ему правильный тип Sql. Таким образом, передача строки может все же привести к строке, но передача DateTime приведет к DateTime.

0 голосов
/ 05 августа 2010

В предложении Where вы можете использовать Date член класса DateTime DateTime.Now.Date. Возвращает дату без времени.

Пока вы работаете с объектами Date (.net или SQL-сервером), формат не имеет значения, так как ваша задача - проанализировать строку в объекте или наоборот, внутренне формат не имеет значения.

0 голосов
/ 05 августа 2010

Попробуйте что-то вроде:

SELECT 
   * 
FROM 
   YourTable 
WHERE 
   RTRIM(CONVERT(CHAR(19), SetDate, 101)) = '3/12/2010'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...