Перевод SQL server в Postgres

#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 )