Есть ли способ получить даты с пользовательскими форматами в SQL Server? - PullRequest
1 голос
/ 20 ноября 2011

В Oracle вы можете использовать:

SELECT to_char(sysdate, 'yyyy-mm') FROM dual;

, чтобы показать только год и месяц части даты.Кроме того, вы можете установить NLS_DATE_FORMAT, чтобы изменить способ возврата дат по умолчанию.

Я знаю, что в SQL Server у вас есть набор предопределенных параметров , которые вы можетеиспользуйте:

SELECT convert(varchar, getdate(), 110) –- mm-dd-yyyy
SELECT convert(varchar, getdate(), 111) –- yyyy/mm/dd

Но есть ли вариант, который дает мне такую ​​же свободу, как у Oracle 1014?Желательно, чтобы мне не требовалось создавать пользовательские функции.

Ответы [ 2 ]

3 голосов
/ 20 ноября 2011

В настоящее время лучшим вариантом является функция CLR , которая является оболочкой для .NET DateTime.ToString(string format).

Если вы не хотите отдельнуюФункция, вы можете построить необходимую строку из кусочков:

YEAR(@d) + '-' + MONTH(@d) + '-' + DAY(@d)

Что касается определенного решения, в следующей версии SQL Server будет функция форматирования .

0 голосов
/ 25 января 2016

Это зависит от того, какую версию SQL Server вы используете.

SQL Server 2005, 2008 и 2008 R2

Для этих версий вам потребуется использовать SQLCLR для предоставления этой функциональности из .NET. Вы можете написать свою собственную функцию SQLCLR, используя класс DateTime (как отмечено в answer @ @ GSerg), или вы можете просто скачать и установить бесплатную версию SQL # (которую я автор, но функция Date_Format свободна).

Пример:

SELECT SQL#.Date_Format(GETDATE(), 'dddd in MMMM', '') AS [Default_language],
       SQL#.Date_Format(GETDATE(), 'dddd in MMMM', 'he') AS [Hebrew],
       SQL#.Date_Format(GETDATE(), 'dddd in MMMM', 'de') AS [German];

Возвращает:

Default_language      Hebrew               German
Monday in January     יום שני in ינואר    Montag in Januar

SQL Server 2012 и новее

Используйте встроенную функцию FORMAT .

* 1 028 * Пример:
SELECT FORMAT(GETDATE(), 'dddd in MMMM') AS [Default_language],
       FORMAT(GETDATE(), 'dddd in MMMM', 'he') AS [Hebrew],
       FORMAT(GETDATE(), 'dddd in MMMM', 'de') AS [German];

Возвращает:

Default_language      Hebrew               German
Monday in January     יום שני in ינואר    Montag in Januar

Для SQLCLR и встроенных FORMAT опций

Следующие две страницы MSDN подробно описывают доступные параметры форматирования:

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