Лучший способ хранить только дату в поле datetime? - PullRequest
3 голосов
/ 17 сентября 2008

Сценарий: Хранимая процедура получает из кода DateTime со, скажем, значением DateTime.Now, в качестве параметра datetime. Хранимая процедура должна хранить только часть даты datetime в строке, но сохраняя всю арифметику, связанную с датами, например, для выполнения поиска по временным интервалам и создания отчетов на основе дат.

Я знаю, что есть несколько способов, но что лучше, учитывая производительность и потерянное пространство?

Ответы [ 5 ]

4 голосов
/ 17 сентября 2008

Бизнес-логика должна обрабатываться вне процедуры. Задания Procs должны сохранять данные, передаваемые ему. Если требуется хранить только дату, а не время, то BL / DL должен передать DateTime.Now **. Date ** (или эквивалент ... в основном часть Date вашего объекта DateTime).

Если по какой-то причине вы не можете контролировать код, всегда есть convert (varchar (10), @YOURDATETIME, 101)

0 голосов
/ 17 сентября 2008

Если вы работаете в Oracle, в вашей хранимой процедуре используйте функцию TRUNC для datetime. Это вернет ТОЛЬКО часть даты.

0 голосов
/ 17 сентября 2008

SQL Server 2008 имеет тип только даты (DATE), который не хранит время. Рассмотрите возможность обновления.

http://www.sqlteam.com/article/using-the-date-data-type-in-sql-server-2008

0 голосов
/ 17 сентября 2008

По сути, вы собираетесь хранить только часть Date вашего объекта DateTime. Это означает, что независимо от того, как вы хотите обрабатывать данные, возвращаемая Дата всегда будет установлена ​​на 00: 00: 00.

Функции, связанные со временем, в этом сценарии бесполезны (даже если ваш оригинальный объект DateTime использует их), поскольку ваша база данных отбрасывает эту информацию.

Арифметика, связанная с датами, будет по-прежнему применяться, хотя для каждой даты, возвращаемой из базы данных, нужно будет указать время в полночь.

0 голосов
/ 17 сентября 2008

сохранить дату со временем = полночь

РЕДАКТИРОВАТЬ: я предполагал MS SQL Server

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...