首页 > 解决方案 > SQL 服务器翻译为 Postgres

问题描述

我正在将一个 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

我不知道如何用 postgres 语言编写 return 语句。我在过去几周与 postgres 说过,有人可以帮助我吗?

谢谢

标签: sql-serverpostgresqldatetime

解决方案


据我所知,这只是将输入日期/时间返回到同一天,就在午夜之前。

到 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(aka timestamptz)的版本


dbo模式不是 Postgres 中的默认模式。所以你要么需要手动创建它,要么在不同的模式中创建函数(例如public


推荐阅读