日期检查问题

时间:2018-04-16 15:36:51

标签: plsql oracle-apex

在Apex应用程序中,我在页面上有一个名为Person的区域。在一个地区内有一个蒙面的日期选择器。我有一项任务来验证出生日期。因此,出生日期不能少于1900年。在“条件”部分,我一直在尝试编写一个pl / sql表达式:

TRUNC(TO_DATE(:P1002_CONTR_BIRTH_DATE, 'MM-DD-YYYY')) > TO_DATE('01.01.1900', 'MM-DD-YYYY')

但它不起作用。我做错了什么?

2 个答案:

答案 0 :(得分:1)

你把它放错了地方 - “条件”用来决定一个项目是否会(或不会)在屏幕上呈现。

验证应该放入......好吧, 验证 (显然)。

  • 右键单击P1002_CONTR_BIRTH_DATE日期选择器项
  • 选择“创建验证”
  • 将其类型设置为“PL / SQL函数(返回错误文本)
  • 使用这样的代码(假设您将日期选择器格式掩码设置为MM-DD-YYYY):
if to_date(:P1002_CONTR_BIRTH_DATE, 'mm-dd-yyyy') < date '1900-01-01' then
   return ('Error - can not set it to before 01-01-1900');
end if;
  • 按下SUBMIT按钮时将其设置为

或者(以及更简单的方法)是打开日期选择器项的属性选项板,导航到其“最小日期”属性并将(例如)-120y放在那里,这将允许日期高于sysdate - 120 years(今天,Apex会提高

  

出生日期小于指定的最低日期04-15-1898'

这不完全是“1900”,但是 - 你可以很容易地计算出来,对吗?此外,-120y比1900年固定年份更灵活。

现在您有两个选择,选择最适合您的选项。

答案 1 :(得分:0)

TO_DATE()方法是将字符串转换为日期,字符串格式应与format_mask相同。

TRUNC(TO_DATE(:P1002_CONTR_BIRTH_DATE, 'MM-DD-YYYY')) > TO_DATE('01-01-1900', 'MM-DD-YYYY')

TRUNC(TO_DATE(:P1002_CONTR_BIRTH_DATE, 'MM-DD-YYYY')) > TO_DATE('01.01.1900', 'MM.DD.YYYY')

并确保:P1002_CONTR_BIRTH_DATE也与格式相同。

detail