Oracle 的“日期”[yyyy-mm-dd]”是否有效?文字总是使用 yyyy-mm-dd 模式?

发布于 2024-12-08 04:38:59 字数 709 浏览 2 评论 0原文

改写一下,假设我使用这样的日期:

date'2010-04-10'

,结果可能不是 2010 年 4 月 10 日(例如 2010 年 10 月 4 日)吗?

更新我听到你和文档的说法。但是...

当使用硬编码日期'yyyy-mm-dd':s 运行批处理作业时,某些(非确定性)计算会失败。在 PL/SQL Developer 中运行失败的 SQL 语句永远会产生相同的、不正确的值。

首先,我运行了相同的计算(数十万),并将 date'' 日期文字替换为 to_date('', '') 函数,一切正常。

然后,我使用 NHibernate 及其 LINQ 提供程序,并完全替换了手工编写的 SQL。 ...一切都工作得很好...NHibernate 生成一个 '' 日期文字,其中包括时间部分,顺便说一句。

更新我的一位同事编写了一些代码,可以在我们的环境中重现错误。他在 Oracle 论坛上发布了他的发现(包括代码):https: //forums.oracle.com/forums/thread.jspa?threadID=2304569&tstart=0

更新更改了标题泽克姆斯的回答。

Rephrased, given I use date like so:

date'2010-04-10'

, could the outcome be anything but April 10th 2010 (e.g. October 4th 2010)?

UPDATE I hear what you, and the docs, say. But...

When a batch job runs, with hard-coded date'yyyy-mm-dd':s, it fails for some (non-deterministic) calculations. Running the failing SQL statements in PL/SQL Developer never yields the same, incorrect, value.

First, I ran the same calculations (hundreds of thousands) with the date'' date literals replaced with the to_date('', '') function, and everything worked just fine.

Then, I used NHibernate and its LINQ provider, and replaced the hand-crafted SQL altogether. ... and everything worked just fine... NHibernate produces a '' date literal, with the time part included, BTW.

UPDATE A colleague of mine wrote some code, that can reproduce the error in our environment. He posted his findings (including the code) at Oracle Forums: https://forums.oracle.com/forums/thread.jspa?threadID=2304569&tstart=0

UPDATE Changed the title according to zerkms' answer.

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

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

发布评论

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

评论(2

玩心态 2024-12-15 04:39:00

它不是函数,而是日期文字。而且,是的,无论任何 Oracle 设置,它始终匹配 YYYY-MM-DD

It is not function, but date literal. And, Yes, it always matches YYYY-MM-DD regardless any oracle settings.

梦里梦着梦中梦 2024-12-15 04:39:00

这是 链接到 Oracle 10g SQL 参考,位于日期时间文字。摘抄:

ANSI 日期文字不包含时间部分,必须指定
正是这种格式('YYYY-MM-DD')。或者您可以指定
Oracle 日期值,如下例所示:

TO_DATE('98-DEC-25 17:30','YY-MON-DD HH24:MI')

Here is a link to Oracle 10g SQL reference, on datetime literals. Excerpt:

The ANSI date literal contains no time portion, and must be specified
in exactly this format ('YYYY-MM-DD'). Alternatively you can specify
an Oracle date value, as in the following example:

TO_DATE('98-DEC-25 17:30','YY-MON-DD HH24:MI')

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