oracle中以00结尾的日期比较

发布于 2024-12-21 10:52:22 字数 453 浏览 1 评论 0原文

我的数据库中存储的日期字段 emp_doj(Data Type DATE)01-01-1900

但在检索数据时,即使格式为 dd-mm-yyyy,该值仍为 01-jan-00

我正在将检索到的日期字段与 SQL 查询中的其他日期进行比较。

select *
form persons
where per_join = to_date(to_char(i.emp_doj,'DD-MM-YYYY'),'DD-MM-YYYY')

这里 to_date(to_char(i.emp_doj,'DD-MM-YYYY'),'DD-MM-YYYY') 的值结果为 01-01-00 ,而不是 01-01-1900

The date stored in my database is 01-01-1900 for field emp_doj(Data Type DATE).

But while retrieving the data, the value is 01-jan-00, even though formatted with dd-mm-yyyy.

I am comparing retrieved date field with some other date in SQL query.

select *
form persons
where per_join = to_date(to_char(i.emp_doj,'DD-MM-YYYY'),'DD-MM-YYYY')

Here the value of to_date(to_char(i.emp_doj,'DD-MM-YYYY'),'DD-MM-YYYY') results in 01-01-00, instead of 01-01-1900

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

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

发布评论

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

评论(3

反差帅 2024-12-28 10:52:22

我怀疑您正在使用的 IDE 的默认 NLS 设置仅显示带有两位数年份的日期。 Oracle 不以任何特定格式存储日期。它在内部以二进制格式存储它们。

因此,我建议您检查 IDE 和/或数据库的设置,您将看到 NLS 日期格式设置为 DD-MM-YY,更改此设置并将其设置为 DD-MM- YYYY,您将看到您希望看到的日期。

至于您的查询,为什么使用 TO_CHAR 然后使用 TO_DATE?如果 emp_doj 是日期字段并且 per_join 也是日期,则直接比较它们是否相等。如果您试图从 emp_doj 值中删除时间部分,那么只需使用 TRUNC() 即可。

有关 NLS 的示例和参考:http://www.orafaq.com/wiki/NLS

更多这里:http://www.oracle.com/technetwork/database/globalization/nls-lang-099431.html

I suspect it's your default NLS settings for the IDE you are using that is merely displaying the dates with a two digit year. Oracle does not store dates in any specific format. It stores them in a binary format internally.

Therefore I suggest you check the settings for your IDE and/or database and you will see the NLS date format set to DD-MM-YY, alter this and set it to DD-MM-YYYY and you will see the dates as you wish to see them.

As for your query, why use TO_CHAR and then TO_DATE? If emp_doj is a date field and per_join is also a date then just compare them directly for equality. If you are trying to cut the time portion off your emp_doj values then just use TRUNC().

For examples and reference on NLS: http://www.orafaq.com/wiki/NLS

More here: http://www.oracle.com/technetwork/database/globalization/nls-lang-099431.html

面如桃花 2024-12-28 10:52:22
select to_char(emp_doj,'dd-mm-yyyy') from yourtable
select to_char(emp_doj,'dd-mm-yyyy') from yourtable
邮友 2024-12-28 10:52:22

我有一些目前对我有用的临时解决方案,我只是将我的选择查询更改为

select *
form persons
where  to_date(per_join,'DD-MM-YYYY')= to_date(i.emp_doj,'DD-MM-YYYY')

I have got some temporary solutions it currently works for me, I simply changed my select query to

select *
form persons
where  to_date(per_join,'DD-MM-YYYY')= to_date(i.emp_doj,'DD-MM-YYYY')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文