#sql-server #postgresql #datetime
#sql-сервер #postgresql #дата и время
Вопрос:
Я перевожу базу данных sql Server в postgres и застрял в этой функции
CREATE function [dbo].[GetEndOfTheDayMoment](@date datetime)
returns datetime
as
begin
return CONVERT(DATETIME, CONVERT(varchar(11),@date, 111 ) ' 23:59:59.997', 111)
end
Я не знаю, как написать оператор return на языке postgres. Я заявлял с postgres в последние недели, так что кто-нибудь может мне помочь?
Спасибо
Комментарии:
1. Документация была бы хорошей первой остановкой, если вы застряли. Не забудьте также показать нам свою попытку PostgreSQL.
Ответ №1:
Насколько я могу судить, это просто возвращает дату / время ввода в тот же день, прямо перед полуночью.
Преобразование в Postgres немного зависит от типа данных вашего ввода.
Если ваш ввод представляет собой date
значение (а не timestamp
значение), вы можете использовать это:
create or replace function dbo.getendofthedaymoment(p_date date)
returns timestamp -- or maybe timestamp with time zone??
as
$$
select p_date time '23:59:59.997';
$$
language sql
stable;
Если ваше входное значение равно a timestamp
, вы можете использовать следующее:
create or replace function dbo.getendofthedaymoment(p_date timestamp)
returns timestamp -- or maybe timestamp with time zone??
as
$$
select p_date::date time '23:59:59.997';
$$
language sql
stable;
Поскольку Postgres поддерживает перегрузку функций, вы можете определить обе функции, и Postgres выберет подходящую в зависимости от вашего входного значения.
Возможно, вы также захотите добавить версию, которая принимает timestamp with time zone
(иначе timestamptz
)
dbo
Схема не является схемой по умолчанию в Postgres. Поэтому вам нужно либо создать его вручную, либо вместо этого создать функцию в другой схеме (например public
)