выполнение запросов с использованием datetime в предложении WHERE

StackOverflow https://stackoverflow.com/questions/3866227

Вопрос

Я использую sql server 2008 R2 в качестве хранилища данных.

До сих пор на тестовой машине у меня была английская версия программного обеспечения, и я использовал для выполнения запросов форматирование поля даты и времени следующим образом

fromDate.ToString("MM/dd/yyyy");

теперь я развернул базу данных на другом сервере, который написан на итальянском языке.Я изменю формат в своем коде на

fromDate.ToString("dd/MM/yyyy");

Есть ли способ сделать запрос в нейтральном формате?

Спасибо!

Редактировать:

Я забыл упомянуть, что я использую NetTiers с CodeSmith.Вот полный образец

AppointmentQuery aq = new AppointmentQuery(true, true);
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate.ToString("MM/dd/yyyy"));
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate.ToString("MM/dd/yyyy"));
AppointmentService aSvc = new AppointmentService();
TList<Appointment> appointmentsList = aSvc.Find(aq);
Это было полезно?

Решение

ISO 8601. Элементы данных и форматы развязки - информационное обмен - представление дат и раз Позволяет как ГГГГ-ММ-ДД, так и юримМДД. SQL Server распознает спецификации ISO.

Хотя стандарт позволяет как форматы YYYY-MM-DD и Yyyymmdd для полных представлений даты календаря, если день [DD] опущен, то допускается только формат YYYY-MM. Свободным датами формы Yyyymm, стандарт избегает путаницы с усеченным представлением Yymmdd (все еще часто используется).

Я предпочитаю формат Yyyymmdd, но я думаю, что это потому, что я только знал об этом, чтобы начать с того, и мне кажется более универсальным, сделавшим с персонажами, которые можно считать специфичными.

Другие советы

Вы должны поделиться кодом, который вы используете, чтобы выполнить запрос, но я думаю, что вы создаете запрос SQL динамически с помощью строки Concats для создания запроса и аргументов. Вы предпочитаете использовать параметризованный запрос, затем вы можете передавать данные в качестве объекта даты и не нужно конвертировать строку.

Например, если ваш запрос может быть что-то вроде этого

DateTime fromDate = DateTime.Now;

SqlCommand cmd = new SqlCommand(
  "select * from Orders where fromDT = @fromDate", con);

cmd.Parameters.AddWithValue("@fromDate", fromDate);

...

Как хороший побочный эффект, это уменьшит ваш риск SQL инъекция. Обновлять: После вашего редактирования, который значительно изменит контекст вопроса, и я должен признать, что у меня нулевое знание проекта. Лестницы. Но просто из любопытства вы пытались просто пройти экземпляры даты напрямую, как в следующем?

AppointmentQuery aq = new AppointmentQuery(true, true); 
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate); 
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate); 
AppointmentService aSvc = new AppointmentService(); 
TList<Appointment> appointmentsList = aSvc.Find(aq); 

Лично я всегда использую yyyy-MM-dd.Это также делает его сортируемым в виде строки.

Однако дата есть дата есть дата.Нет необходимости изменять дату на строку.В .NET пользователь DateTime.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top