Oracle子句中的日期比较

Hit*_*shi 4 oracle date

例如,我有一个学生表,带有一个DOJ(加入日期)列,其类型现在设置为DATE,因为我以dd-mon-yy格式存储了记录。

我在运行时有一个IN参数,日期以字符串形式传递,其格式为dd / mm / yyyy。如何比较和获取日期结果?

我想获取每个数据库表学生的DOJ为25-AUG-92的学生的记录数,但是我以dd / mm / yyyy格式在IN参数中获取varchar的日期,请指导。

我曾尝试多种选择,例如truncto_dateto_char但遗憾的是似乎没有任何工作。

MT0*_*MT0 6

我有一个学生表,带有一个DOJ(加入日期)列,其类型设置为DATE现在,因为我以dd-mon-yy格式存储记录。

不完全是,DATE数据类型没有格式。它在内部以7字节的形式存储在表中(年为2字节,月,日,时,分和秒均为1字节)。您正在使用的用户界面(即SQL / PLUS,SQL Developer,Toad等)将处理DATE从其二进制格式到人类可读格式的格式。在SQL / Plus(或SQL Developer)中,此格式基于NLS_DATE_FORMATsession参数

如果DATE仅使用日,月和年输入,则时间部分(可能)将设置为00:00:00(午夜)。

我在运行时有一个IN参数,日期以字符串形式传递或说varchar及其dd/mm/yyyy格式。如何比较和获取日期结果?

假设您的DOJ列的时间部分始终为午夜,则:

SELECT COUNT(*)
FROM   students
WHERE  doj = TO_DATE( your_param, 'dd/mm/yyyy' )
Run Code Online (Sandbox Code Playgroud)

如果不总是午夜,则:

SELECT COUNT(*)
FROM   students
WHERE  TRUNC( doj ) = TO_DATE( your_param, 'dd/mm/yyyy' )
Run Code Online (Sandbox Code Playgroud)

要么:

SELECT COUNT(*)
FROM   students
WHERE  doj >= TO_DATE( your_param, 'dd/mm/yyyy' )
AND    doj <  TO_DATE( your_param, 'dd/mm/yyyy' ) + INTERVAL '1' DAY
Run Code Online (Sandbox Code Playgroud)