PL/SQL如何比较proc中的日期

发布于 2024-11-28 16:20:10 字数 170 浏览 2 评论 0原文

我的数据库中的日期存储如下:“2/6/2009 6:30:00 PM”。将此日期与我在存储过程中从 UI 传递的日期进行比较的正确方法是什么?

尝试做类似的事情 TE_ES_ACT_END_DATETIME < '2009 年 2 月 6 日 07:30:00', 但这不起作用。有什么建议吗?谢谢你!

Dates in my DB are stored like this: "2/6/2009 6:30:00 PM". What is the proper way to compare this date to a date I'm passing in from my UI in a stored procedure?

Trying to do something like
TE_ES_ACT_END_DATETIME < '2/6/2009 07:30:00',
but this isn't working. Any suggestions? Thank you!

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

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

发布评论

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

评论(1

缱绻入梦 2024-12-05 16:20:10

使用 TO_DATE 函数将文本转换为日期。

就像这样:

to_date('2/6/2009 6:30:00 PM', 'MM/DD/YYYY HH12:MI:SS AM')

如果您使用字段名称而不是常量字符串,您将获得翻译为日期的字段值。您可以在查询中比较它,或者返回它并使用正常的 > 在 PL/SQL 代码中比较它。或<运营商。

但当然,最好将日期保存为日期。 :) 如果您愿意,您可以进行逐步转换:

首先,向表中添加一个日期列并编写一个触发器
每当输入日期时都会更新 stringdate 字段。

  create or replace trigger DATESYNC before insert or update of YOURNEWDATEFIELD
  on YOURTABLE for each row
  begin
    :new.CURRENTSTRINGDATE := to_char(:new.YOURNEWDATEFIELD, 'MM/DD/YYYY HH12:MI:SS AM');
  end;

然后,编辑用于在日期字段中输入日期的 GUI
而不是字符串字段。所有其他代码仍将使用
字符串字段并将继续工作。
编写一条更新语句,使用 to_data 将每个文本转换为日期。

然后,就可以一一消除所有读取该字符串的代码
字段并更新它以使用日期字段。所有尚未转换的代码仍然可以工作,因为触发器仍然更新字符串字段。

转换完所有代码后,删除字符串字段和触发器。

这将使您的代码更快,数据更紧凑,并且您的查询将更好地利用日期字段上的索引。

Use the TO_DATE function to translate a text to a date.

Like so:

to_date('2/6/2009 6:30:00 PM', 'MM/DD/YYYY HH12:MI:SS AM')

If you use the field name instead of the constant string, you will get the field value, translated to a date. You can compare it in your query, or return it and compare it in PL/SQL code using the normal > or < operators.

But of course, it is better to save the date as a date. :) If you like, you can do a step by step conversion:

First, add a date column to the table and write a trigger that
updates the stringdate field whenever a date is entered.

  create or replace trigger DATESYNC before insert or update of YOURNEWDATEFIELD
  on YOURTABLE for each row
  begin
    :new.CURRENTSTRINGDATE := to_char(:new.YOURNEWDATEFIELD, 'MM/DD/YYYY HH12:MI:SS AM');
  end;

Then, edit the GUI that you use to enter a date in the date field
instead of the string field. All other code will still make use of
the string field and will keep working.
Write an update statement that uses to_data to convert each text to a date.

Then, you can one by one eliminate all code that reads the string
field and update it to use the date field. All code that is not converted yet will still work, because the trigger still updates the string field.

After all code is converted, drop the string field and the trigger.

That will make your code faster, your data more compact, and your queries will make better use of indexes on the date field.

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