выполнение запросов с использованием datetime в предложении WHERE
-
28-09-2019 - |
Вопрос
Я использую 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
.