Как получить правильный формат даты?

#sql #sql-server #tsql

Вопрос:

Не имея возможности получить желаемый результат. Вопрос в следующем : Создайте функцию, которая принимает входной параметр типа datetime и возвращает дату в формате ММ/ДД/ГГГГ. Например, если я передам «2006-11-21 23:34:05.920», вывод функций должен быть 21.11.2006

Мой SQL-код :

 CREATE FUNCTION CalculateDate(@InputDate DATETIME)
RETURNS DATE 
AS
BEGIN
    RETURN CONVERT(varchar(10), @InputDate, 101)
END

SELECT dbo.CalculateDate('2006-11-21 23:34:05.920') AS [MM/DD/YYYY]
 

Но при исполнении :

введите описание изображения здесь

Комментарии:

1. Какие СУБД вы используете? (Приведенный выше код относится к конкретному продукту.)

2. Мне просто нужно создать функцию. Это не относится ни к какой СУБД

3. @jarlh спрашивает, какой en.wikipedia.org/wiki/… (Система управления базами данных), которую вы используете. Примеры : MySQL, Microsoft SQL Server, SQLite, Microsoft Access, Oracle и т.д.

4. Вы хотите вернуть строку. Вы возвращаете дату: RETURNS DATE .

5. О, извините, Microsoft SQL Server @jarlh.

Ответ №1:

Дата не имеет формата. 2006-11-21 , 21.11.2006 , 11/21/2006 все являются представлениями одной и той же даты (или могут быть).

Когда вас просят написать функцию, которая возвращает дату в определенном формате, вас просят вернуть строку. Однако ваша функция возвращает a DATE .

Что происходит в вашей функции, так это то, что вы преобразуете дату-время в строку даты, а СУБД преобразует ее обратно в a DATE .

Изменение REURNS DATE на `ВОЗВРАЩАЕТ VARCHAR(10), следовательно:

 CREATE FUNCTION CalculateDate(@InputDate DATETIME)
RETURNS VARCHAR(10)
AS
BEGIN
    RETURN CONVERT(varchar(10), @InputDate, 101)
END
 

Демо: https://dbfiddle.uk/?rdbms=sqlserver_2019amp;fiddle=f5cfdc7e1761ae6e370a6b4f51674813