如何将Oracle特定函数改写为ANSISQL

如何将Oracle特定函数改写为ANSISQL,oracle,postgresql,ansi-sql,Oracle,Postgresql,Ansi Sql,有一个针对Oracle数据库运行的遗留软件。我试图将其推广到Docker测试中,所以我准备了一个带有数据库模式的PostgreSQL映像。现在,我试图针对Postgres DB运行该应用程序,但出现以下错误: org.postgresql.util.PSQLException: ERROR: function to_number(text) does not exist 因此,我查看了代码,在一些选择中发现了以下构造: to_number(to_char({0},'HH24MI')) <

有一个针对Oracle数据库运行的遗留软件。我试图将其推广到Docker测试中,所以我准备了一个带有数据库模式的PostgreSQL映像。现在,我试图针对Postgres DB运行该应用程序,但出现以下错误:

org.postgresql.util.PSQLException: ERROR: function to_number(text) does not exist
因此,我查看了代码,在一些选择中发现了以下构造:

to_number(to_char({0},'HH24MI')) <= to_number(to_char({1},'HH24MI'))
to_number(to_char({0},'HH24MI')) > to_number(to_char({1},'HH24MI'))
to_number(to_char({0},'HH24MI'))to_number(to_char({1},'HH24MI'))
由于我不是一名数据库专家,所以我假设此
TO_NUMBER
是Oracle特有的功能。在这种情况下,它作为一个过滤器返回指定时间范围内的记录


有没有办法简单地用ANSI SQL中类似的函数替换这个
TO_NUMBER
函数?

而不是Oraclism

to_number(to_char(current_timestamp, 'HH24MI'))
您可以使用以下标准SQL构造:

100 * EXTRACT(HOUR   FROM current_timestamp)
    + EXTRACT(MINUTE FROM current_timestamp)

CAST(…AS INT)
这两种解决方案都有效,甚至
CAST(…AS INT)
看起来更优雅。因为这是唯一的答案,我接受了。当然,我必须测试过滤器,但我认为可以。如果您需要标准SQL语句,则不能使用
来\u char
。PostgreSQL恰好支持它,但它不是标准的。您必须对它进行基准测试。但我的猜测是,任何性能差异都非常小,无论查询是什么,与查询的其余成本相比,它都将消失。