Вход на сайт
Как правильно даты сравнивать в MSSQL?
87
NEW 18.12.06 12:49
Последний раз изменено 18.12.06 12:50 (voxel3d)
В таблице поле DateTime FIELD, я имею DateTime значение, надо выбрать все записи где FIELD > значения. Что к чему приводить надо? Методом тыка нашёл следущее:
SELECT * FROM Table WHERE FIELD > var_1,
в программе:
var_1 = год + "." + число + "." + месяц.
Прямее есть способ? Может какие-то функции форматирования дат в самом MSSQL, чтобы туда DateTime можно передавать было?
SELECT * FROM Table WHERE FIELD > var_1,
в программе:
var_1 = год + "." + число + "." + месяц.
Прямее есть способ? Может какие-то функции форматирования дат в самом MSSQL, чтобы туда DateTime можно передавать было?
Dropbox - средство синхронизации и бэкапа файлов.
NEW 18.12.06 13:25
SELECT * FROM Table WHERE FIELD > @v_var_1,
>Прямее есть способ?
В QA жать "F1", печатать 'date', читать.
по ситуации - CAST и CONVERT, возможно DATEADD, DATEFORMAT
А вообще - это не то место, где надо манипулировать датой - отдай ее как параметр процедуре, а вычисляй - в бизнес-объекте.
P.S. Хардкоденную точку - выкидывай сразу - на каждом серваке все по-другому...
в ответ voxel3d 18.12.06 12:49
SELECT * FROM Table WHERE FIELD > @v_var_1,
>Прямее есть способ?
В QA жать "F1", печатать 'date', читать.

по ситуации - CAST и CONVERT, возможно DATEADD, DATEFORMAT
А вообще - это не то место, где надо манипулировать датой - отдай ее как параметр процедуре, а вычисляй - в бизнес-объекте.
P.S. Хардкоденную точку - выкидывай сразу - на каждом серваке все по-другому...
NEW 18.12.06 13:50
в ответ scorpi_ 18.12.06 13:38
> Насколько я понял, он спрашивает, как DateTime передать в параметр.
Угу. Вот, наш╦л:
SELECT * FROM tblFehlzeit
WHERE convert(varchar(10), Beginn, 112) >= '20061230'
параметр из DateTime переделываю в строку ('20061230'). Хотелось бы вот такую строку передавать: '30.12.2006 00:00:00'. Работаю с C# .Net System.Data.SqlClient.
Угу. Вот, наш╦л:
SELECT * FROM tblFehlzeit
WHERE convert(varchar(10), Beginn, 112) >= '20061230'
параметр из DateTime переделываю в строку ('20061230'). Хотелось бы вот такую строку передавать: '30.12.2006 00:00:00'. Работаю с C# .Net System.Data.SqlClient.
Dropbox - средство синхронизации и бэкапа файлов.
NEW 18.12.06 13:54
в ответ scorpi_ 18.12.06 13:38
DateTime передается (у него .Net сейчас) элементарно:
Вроде это покрывает все, кроме Блобов...
В ответ на:
internal IDbDataParameter AddParameter(IDbCommand cmd, string paramName,
DbType dbType, object value)
{
IDbDataParameter parameter = cmd.CreateParameter();
parameter.ParameterName = CreateCollectionParameterName(paramName);
parameter.DbType = dbType;
if (null == value)
{
parameter.Value = DBNull.Value;
}
else if (dbType == DbType.Boolean)
{
string val = (string)value;
if ((val == "Yes") || (val == "True"))
parameter.Value = bool.TrueString;
else if( (val == "No") || (val == "False"))
parameter.Value = bool.FalseString;
else
parameter.Value = DBNull.Value;
}
else
{
parameter.Value = (string)value;
}
cmd.Parameters.Add(parameter);
return parameter;
}
internal IDbDataParameter AddParameter(IDbCommand cmd, string paramName,
DbType dbType, object value)
{
IDbDataParameter parameter = cmd.CreateParameter();
parameter.ParameterName = CreateCollectionParameterName(paramName);
parameter.DbType = dbType;
if (null == value)
{
parameter.Value = DBNull.Value;
}
else if (dbType == DbType.Boolean)
{
string val = (string)value;
if ((val == "Yes") || (val == "True"))
parameter.Value = bool.TrueString;
else if( (val == "No") || (val == "False"))
parameter.Value = bool.FalseString;
else
parameter.Value = DBNull.Value;
}
else
{
parameter.Value = (string)value;
}
cmd.Parameters.Add(parameter);
return parameter;
}
Вроде это покрывает все, кроме Блобов...
NEW 18.12.06 14:01
А зачем? Конечная цель? Отобрать записи, после указанной даты?
DATEDIFF(поле, @парам) > 0
Где поле и @парам - datetime типа
Это и будетю И без всяких заморочек с форматом даты.
в ответ voxel3d 18.12.06 13:50
В ответ на:
> Насколько я понял, он спрашивает, как DateTime передать в параметр.
Угу. Вот, нашёл:
SELECT * FROM tblFehlzeit
WHERE convert(varchar(10), Beginn, 112) >= '20061230'
> Насколько я понял, он спрашивает, как DateTime передать в параметр.
Угу. Вот, нашёл:
SELECT * FROM tblFehlzeit
WHERE convert(varchar(10), Beginn, 112) >= '20061230'
А зачем? Конечная цель? Отобрать записи, после указанной даты?
DATEDIFF(поле, @парам) > 0
Где поле и @парам - datetime типа
В ответ на:
параметр из DateTime переделываю в строку ('20061230'). Хотелось бы вот такую строку передавать: '30.12.2006 00:00:00'.
параметр из DateTime переделываю в строку ('20061230'). Хотелось бы вот такую строку передавать: '30.12.2006 00:00:00'.
Это и будетю И без всяких заморочек с форматом даты.
NEW 18.12.06 14:08
yyyymmdd hh:mm:ss - самый бронебойный формат, гарантирует отсутствие проблем при любых региональных настройках. Если передавать строкой, то только так. Остальное сакс и чревато граблями.
datetime конвертить в nvarchar не надо. datetime-поле можно напрямую со строкой сравнивать, в которой дата содержится.
yyyymmdd hh:mm:ss - самый бронебойный формат, гарантирует отсутствие проблем при любых региональных настройках. Если передавать строкой, то только так. Остальное сакс и чревато граблями.
datetime конвертить в nvarchar не надо. datetime-поле можно напрямую со строкой сравнивать, в которой дата содержится.