irfanansari Ответов: 4

Как изменить формат даты в SQL server


есть ли какой-либо способ изменить формат даты в sql server, как если бы выбрать поле с датой, то по умолчанию оно принимает дату в формате гггг-ММ-ДД, а в sql server оно принимает как ДД-ММ-гггг


если я использую запрос как
select format(datee,'dd - MM - yyyy') from sale2 where datee > ='2019-01-01' and datee <= (select format(getdate(),'dd - MM - yyyy'))


тогда это take works, но если я использую datee='01-01-2019', то это не работает

Что я уже пробовал:

if i use query as 
<pre>select format(datee,'dd - MM - yyyy') from sale2 where datee > ='2019-01-01' and datee <= (select format(getdate(),'dd - MM - yyyy'))


тогда это take works, но если я использую datee='01-01-2019', то это не работает

irfanansari

я также использую
выберите формат(datee,'ДД - ММ - гггг') от sale2 где datee &ГТ;= конвертировать(тип varchar(10),'02-01-2019', 110) и datee &ЛТ;=конвертировать(тип varchar(10), getdate(), то 110)

4 Ответов

Рейтинг:
32

OriginalGriff

Хотя Мацей Лос прав, это, вероятно, очень плохо.
Вообще говоря, SQL не должен заботиться о форматах дат - это функция презентации, и она должна быть отсортирована на вашем языке презентации, так как это единственное место, которое имеет доступ к пользовательским настройкам. SQL должен хранить и извлекать данные формата agnostic date / datetime, которые были обработаны (или будут обработаны) программным обеспечением пользовательского интерфейса. Все, что SQL должен получить, - это значение DateTime (предпочтительно UTC, чтобы это был часовой пояс и агностик "летнего времени") с помощью параметризованного запроса и вернуть значение DateTime в том же формате.

Форматирование значения даты или времени в SQL предполагает то, что хочет пользователь, а SQL вообще не имеет никакой информации о фактическом пользователе, только ваше приложение, которое взаимодействует с БД, имеет ее. Единственное использование для установки dateformat в SQL связано с "интерпретацией" строк даты, передаваемых в SQL, и это плохая идея, так как она может оставить ваше приложение широко открытым для SQL-инъекций, которые могут повредить или уничтожить вашу БД.


Maciej Los

Очень хорошо сказано!

Рейтинг:
2

Patrice T

Цитата:
есть ли какой-либо способ изменить формат даты в sql server

Это плохая идея, используйте тип данных DATE , он специально создан для обработки дат и позволяет сравнивать даты.
Предполагая, datee есть ли тип данных даты в вашей таблице, я бы использовал:
select format(datee,'dd - MM - yyyy') from sale2 where datee > =DATE '2019-01-01' and datee <= getdate()

или
select datee from sale2 where datee > =DATE '2019-01-01' and datee <= getdate()

и пусть форматирование будет сделано в соответствии с локальным форматом даты клиента.
Даты и время: литералы даты и времени[^]


Рейтинг:
1

Maciej Los

Посмотрите на это: SET DATEFORMAT (Transact-SQL) - SQL Server | Microsoft Docs[^]


Рейтинг:
0

CHill60

Я предпочитаю решать эту проблему с помощью однозначных форматов дат - всегда передавайте даты как гггг-ММ-ДД или ГГГГММДД. Это должно работать для всех версий SQL - SQL Server однозначные строки даты - Мэтт Рэндл[^]

Вам не нужно форматировать даты, чтобы использовать их в запросах - чтобы просто получить часть даты getdate (), попробуйте сделать это вместо этого:

select format(datee,'dd - MM - yyyy') from sale2 where datee > ='2019-01-01' and datee <= dateadd(dd, datediff(dd, 0, getdate()), 0)
из которого я и адаптировался Некоторые Распространенные Процедуры Даты – SQLServerCentral[^]