SQL Server запрос даты - PullRequest
       5

SQL Server запрос даты

1 голос
/ 15 января 2011

Я новичок в разработке и хочу знать профессиональный способ работы с датами в SQL Server.В моих приложениях в основном мы имеем дело с типом данных DATE и не заботимся о временной части.Также поддерживается формат дд / мм / гггг

Так, например, если у меня есть таблица со следующей структурой.

EmployeeTable  
---------------
emp_id int  
emp_name varchar(50)  
join_date date  

и если я хочу запросить "join_date" между датами началаи дату окончания и передайте дд / мм / гггг в качестве критерия хранимой процедуры и хотите запросить.

Какой профессиональный способ обработки дат?Я всегда конвертирую дату в varchar, а затем делаю сравнение, которое, как мне кажется, непрофессионально.Поэтому, пожалуйста, объясните, как это сделать в порядке, с примером, который я был бы признателен.

Ответы [ 4 ]

3 голосов
/ 15 января 2011

SQL отлично обрабатывает даты, поэтому вам не нужно конвертировать даты.

Если вы передадите параметры как date типов, у вас не возникнет проблем:

CREATE PROCEDURE myProc 
    @start date, 
    @end date 
AS 
    SELECT emp_id, emp_name, join_date
    FROM EmployeeTable
    WHERE join_date BETWEEN start AND end;
2 голосов
/ 15 января 2011

Сохранить даты как даты. Не конвертируйте его в строки. В этом нет необходимости. Когда вы отправляете даты в SQL Server из своего кода, делайте это с параметрами, тогда вам не нужно беспокоиться о правильном формате в ваших строках.

Типы данных SQL Server Date:

  • Дата: с 0001-01-01 по 9999-12-31
  • SmallDateTime: 1900-01-01 до 2079-06-06 (точность 1 минута)
  • DateTime: 1 января 1753 г., через 31 декабря 9999 г. (Точность миллисекунда)
  • DateTime2: 0001-01-01 до 9999-12-31 (точность 100 наносекунд)
2 голосов
/ 15 января 2011

Если вы не хотите форматировать дату в выходных данных определенным образом, нет смысла преобразовывать дату в varchar.Вы используете тип данных date, поэтому позвольте SQL выполнить сравнения за вас.

Если вы хотите сравнить даты в диапазоне дат, вы можете использовать это:

WHERE join_date BETWEEN '2010-01-01' AND '2010-12-31'
0 голосов
/ 16 января 2011

Это незначительный момент, но стоит отметить, что все запросы, представленные к SQL Server, находятся в TEXT. На каком-то этапе, основываясь на некоторых настройках языка и перевода на уровне доступа к данным (OLEDB, Native, ADO), он превращается в текстовую форму, поэтому даты всегда представляются в виде «текста».

Лучший формат для использования всегда YYYYMMDD для SQL Server. Даже МГГГ-ММ-ДД может быть неправильным, из-за неясных настроек формата даты. Смотрите этот пример.

set dateformat dmy  -- more than common for non-US locations
select CONVERT(varchar, convert(datetime, '2010-12-31'), 112)

Не удается .

Msg 242, Level 16, State 3, Line 3
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

Это относится к формату, который нужно использовать, когда вам нужно построить дату, встроенную в оператор SQL. Тем не менее, если это возможно, просьба параметризировать запросы для получения таких преимуществ, как

  1. предотвращение внедрения SQL
  2. позволяя уровню связности db обеспечивать правильные форматы при генерации TSQL
  3. план запроса повторно использовать на SQL Server
  4. пункт 3 = более эффективные запросы и более эффективный SQL Server
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...