![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с Smalldatetime [D5, MSSQL]
denmin © (2004-02-25 15:09:00)Здравствуйте. Проблема в следующем: есть SP, где идет выборка таким образом
DecodeDate (Now, Year, Month, Day);
DateYear:=StrToDate('01.01.'+IntToStr(Year));
Query4.Close;
Query4.Parameters.Items[1].Value:=DateYear;
Query4.Parameters.Items[2].Value:=Date;
Query4.ExecProc;
т.е. если брать 25 февраля, то dateyear будет 01.01.2004, а Date 25.02.2004.
В базе, из которой выьирается это поле, smalldatetime, т.е. ругается на несоответсвие типов, т.к. в базе 2004-01-01 00:00:00 и 2004-02-25 00:00:00 соответственно.
Помогите разобраться пожалуйста.
И если можно, то объясните мне почему в Enterprise Manager даты выглядят как 25.02.2004, а в QA 2004-02-25 00:00:00?
Ega23 (2004-02-25 15:50:00) [1]Это TStoredProc что-ли? Никогда не пользовался...
sniknik (2004-02-25 15:49:00) [2]нет параметры передаются "as is", datetime так числом и пойдет.
а потом операции про которые говорил делаются не в sql-запросе, посмотри внимательнее на код.
Ega23 (2004-02-25 15:40:00) [3](операции с числами "легче" чем со строкой)
Это же параметр в SQL-запрос, один пёс к строке приводить придётся...
Ega23 (2004-02-25 15:34:00) [4]1. smalldatetime - datetime с точностью до минут. Приводится обычным cast:
DateYear=cast(DateYear as smalldatetime)
2. Если в QA ты выборку сделаешь через
YourDate=Convert(varchar(10), YourDate, 104)
то ты то же самое увидишь, что и в EM.
sniknik (2004-02-25 15:34:00) [5]ругатся может потому что ты считаеш неправильно, с еденицы а программитский счет с 0. ;о)
разное представление даты зависит от настроек, системных, внутрипрограммых неважно. в своей можно поставить любое отображение хоть на иврите, дата(число) от этого не поменяется. почему у EM/QA должны быть ограничения?
> DecodeDate (Now, Year, Month, Day);
> DateYear:=StrToDate('01.01.'+IntToStr(Year));
а это зачем? не подобие этого StartOfTheYear() случаем? или если вдруг в 5 нет такой функции, DateYear:= EncodeDate(YearOf(Now), 1, 1); (операции с числами "легче" чем со строкой)