简单的 Oracle 查询:文字与格式字符串不匹配

发布于 2024-10-15 19:38:14 字数 750 浏览 5 评论 0原文

我想在 Oracle 中执行一个简单的函数。签名定义如下:

CREATE OR REPLACE FUNCTION NewCaseListForValidation
(
                             p_fromDate in DATE,
                             p_toDate in DATE,
                             p_rowCount in INT
)
RETURN
                             SYS_REFCURSOR
IS
                             return_value SYS_REFCURSOR;
...

我应该能够执行它:

var rc refcursor
exec :rc := newcaselistforvalidation('2010-01-01','2011-01-01',100);
print :rc

但是当输入“newcaselistforvalidation('2010-01-01','2011-01-01',100)”时,我得到:

ERROR at line 1:
ORA-01861: literal does not match format string
ORA-06512: at line 1

我用谷歌搜索了一下并且看来我无法弄清楚以正确的格式输入日期。谁能帮助我吗?

I want to execute a simple function in Oracle. The signature is defined as follows:

CREATE OR REPLACE FUNCTION NewCaseListForValidation
(
                             p_fromDate in DATE,
                             p_toDate in DATE,
                             p_rowCount in INT
)
RETURN
                             SYS_REFCURSOR
IS
                             return_value SYS_REFCURSOR;
...

I should be able to execute it with:

var rc refcursor
exec :rc := newcaselistforvalidation('2010-01-01','2011-01-01',100);
print :rc

But when typing "newcaselistforvalidation('2010-01-01','2011-01-01',100)", I get:

ERROR at line 1:
ORA-01861: literal does not match format string
ORA-06512: at line 1

I googled a bit and it seems I can't figure out to type the date in a correct format. Can anyone help me?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

ヤ经典坏疍 2024-10-22 19:38:14

在 Oracle 中查询 NLS_PARAMETERS - 然后您将能够看到您的数据库接受的日期格式。

但通常我使用 to_date() 函数:

to_date('01-01-2011','DD-MM-YYYY');

在英国输入我的日期。

Query NLS_PARAMETERS in Oracle- you will then be able to see what format your DB is accepting dates in.

Typically however i use the to_date() function:

to_date('01-01-2011','DD-MM-YYYY');

In the UK to input my dates.

物价感观 2024-10-22 19:38:14

to_date() 函数的替代方法是对 DATE 或 TIMESTAMP 文字使用 ANSI 标准格式:

DATE '2010-01-31'
TIMESTAMP '2010-01-31 21:22:23'

日期和时间始终使用 ISO 规则指定(YYYY-MM-DD 和时间的 24 小时格式)

这也适用于许多其他格式(符合标准)DBMS。

An alternative to the to_date() function is to use the ANSI standard format for DATE or TIMESTAMP literals:

DATE '2010-01-31'
TIMESTAMP '2010-01-31 21:22:23'

Date and time is always specified using ISO rules (YYYY-MM-DD and 24hour format for time)

This also works on a lot of other (standard compliant) DBMS.

晨曦÷微暖 2024-10-22 19:38:14

最好不要依赖 NLS_PARAMETERS 设置中的特定值,
因为这将使您的函数在环境中中断并使用另一个NLS_DATE_FORMAT

我会按照上面答案中的建议在您的函数中明确指定日期格式

exec :rc := newcaselistforvalidation(to_date('2010-01-01','YYYY-MM-DD'),to_date('2011-01-01','YYYY-MM-DD'),100);

It's best not to rely on particular value in NLS_PARAMETERS settings,
cause this will make your function break in the env with another NLS_DATE_FORMAT.

I'd explicitly specify date formatting in your function as suggested in the answer above

exec :rc := newcaselistforvalidation(to_date('2010-01-01','YYYY-MM-DD'),to_date('2011-01-01','YYYY-MM-DD'),100);
心安伴我暖 2024-10-22 19:38:14

插入 tblDate (dateStart)
值('2013 年 6 月 20 日');
如果将月份整数更改为字符串,“DD-MON-YYYY”将作为有效的数据字符串,而无需在其前面添加 DATE 标识符。

INSERT INTO tblDate (dateStart)
Values ('20-JUN-2013');
If you change month integer into a string 'DD-MON-YYYY' works as a valid data string without having to preface it with the DATE identifier.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文