【问题标题】:SQL server translation to PostgresSQL 服务器翻译为 Postgres
【发布时间】:2020-10-20 11:40:02
【问题描述】:

我正在将一个 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 说过,有人可以帮助我吗?

谢谢

【问题讨论】:

  • 如果您遇到困难,documentation 将是一个很好的第一站。不要忘记向我们展示您的 PostgreSQL 尝试。

标签: sql-server postgresql datetime


【解决方案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;

如果您的输入值为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

【讨论】:

    猜你喜欢
    • 2021-08-30
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 2014-06-29
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多