与文化无关的日期格式

1 oracle plsql

我正在调用具有参数日期的 Oracle 过程。我如何指定日期的格式,以便无论 Oracle 使用哪种全球化,它都能被 Oracle 识别?

例如

create or replace procedure MyProc(p_valid_date in date) ...
Run Code Online (Sandbox Code Playgroud)

客户端调用proc,我应该如何将p_valid_date指定为字符串...?如果我使用“01212014”,即 DDMMYYYY,则它不适用于美国设置。如果我使用美国设置,则它在英国不起作用。ETC。

在 SQL Server 中,我使用 YYYYMMDD 格式,该格式是文化不变的,但我在 Oracle 文档中找不到有关文化不变格式的任何内容,并且我尝试过的所有格式似乎总是与文化绑定。

更新 我不想使用函数,因为我的客户端进行纯过程调用。这是我的客户的限制。我知道我可以将参数更改为字符串,然后在过程中使用 to_date 转换字符串,但这似乎是一个非常糟糕的设计。

谢谢

Dmi*_*riy 5

ISO 日期格式是您正在寻找的“不变”:

SQL> alter session set nls_date_format='dd/mon.yyyy';

Session altered.

SQL> select sysdate from dual;

SYSDATE
-----------
07/nov.2014

SQL> select to_char(DATE '2014-12-31') from dual;

TO_CHAR(DAT
-----------
31/dec.2014
Run Code Online (Sandbox Code Playgroud)

您可以使用这个表示法:DATE '2014-12-31'

  • 我使用“to_char”只是为了证明它收到了正确的日期。在您的过程调用中,您可以编写“MyProc(DATE '2014-12-31')”。 (3认同)