Как работать с полями типа 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