Как работать с полями типа DateTime?

Материал из DRKB

Как работать с полями типа DateTime?[править | править код]

Query1.Sql.Text := 'SELECT * FROM TableName WHERE (Date > :D1) AND (Date < :D2)';
Query1.Params.ParseSql(Query1.Sql.Text, True);
Query1.Params.ParamByName('D1').Value := StringToDatetime('09.10.2002');
Query1.Params.ParamByName('D2').Value := StringToDatetime('09.11.2002');
Query1.Active := True;


Возможно применение запроса:

SELECT Date
FROM TableName
WHERE BETWEEN '01/01/2002' AND '31/01/2002'


В этом коде 2 неточности, которые могут стать потенциальными ошибками, именно по этому я рекомендую использовать код с параметрами. Итак:

1) Не все SQL сервера понимают строки как нечто в одинарных кавычках, некоторые требуют двойных кавычек, некоторые сервера могут быть настроены на одинарные или двойные кавычки. Если дату передавать как параметр, то конечный запрос будет строить сам сервер, и он поставит те кавычки, которые нужны.

2) Где гарантия что формат даты одинаковый на компьютере с программой и компьютере с базой данных? У меня может стоять на клиенте русская винда с русскими настройками и '2/9/2002' будет интерпретироваться как "2 сентября", а на компьютере с базой данных стоит регионарный стандарт для Америки и эта же дата будет означать "9 февраля". (Про разделители полей даты я уже молчу). В этом случае так же параметры работают корректнее - серверу передаётся дата, а он делает запрос в соответствии со своими регионарными стандартами.


Author: Автор: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02402