#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