在Oracle SQL中比较日期

前端之家收集整理的这篇文章主要介绍了在Oracle SQL中比较日期前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图显示1994年6月20日之后雇用的员工人数,
但我得到一个错误说“JUN”无效的标识符。请帮助,谢谢!
Select employee_id,count(*)
From Employee
Where to_char(employee_date_hired,'DD-MON-YY') > 31-DEC-95;
@H_403_4@
@H_403_4@
31-DEC-95不是字符串,20-JUN-94也不是。他们是数字与一些额外的东西添加到末端。这应该是’31 -DEC-95’或’20 -JUN-94′ – 请注意单引号’。这将使您能够进行字符串比较。

但是,你不是做一个字符串比较;你正在做一个日期比较。您应该将字符串转换为日期。通过使用内置的TO_DATE()功能,或者date literal

至今()

select employee_id
  from employee
 where employee_date_hired > to_date('31-DEC-95','DD-MON-YY')

这种方法有一些不必要的陷阱

>作为a_horse_with_no_name在注释中注释,DEC,不一定意味着12月。这取决于您的NLS_DATE_LANGUAGENLS_DATE_FORMAT设置。为了确保您与任何地区的工作比较,您可以使用datetime format model MM
> ’95年是不准确的。你知道你是指1995年,但如果是’50,是1950年还是2050年?最好是明确

select employee_id
  from employee
 where employee_date_hired > to_date('31-12-1995','DD-MM-YYYY')

日期文字

日期文字是ANSI标准的一部分,这意味着您不必使用Oracle特定的函数。使用文字时,必须以YYYY-MM-DD格式指定日期,并且不能包含时间元素。

select employee_id
  from employee
 where employee_date_hired > date '1995-12-31'

请记住,Oracle date数据类型包含时间元素,因此没有时间部分的日期等同于1995-12-31 00:00:00。

如果要包括时间部分,则必须使用时间戳文字,格式为YYYY-MM-DD HH24:MI:SS [.FF0-9]

select employee_id
  from employee
 where employee_date_hired > timestamp '1995-12-31 12:31:02'

更多信息

NLS_DATE_LANGUAGE派生自NLS_LANGUAGENLS_DATE_FORMAT派生自NLS_TERRITORY.这些在您最初创建数据库时设置,但可以通过更改您的inialization参数文件(仅在真正需要时)或在会话级别使用ALTER SESSION语法进行更改。例如:

alter session set nls_date_format = 'DD.MM.YYYY HH24:MI:SS';

意即:

> DD数字日期的一个月,1 – 31
> MM的数字月份,01 – 12(一月是01)
> YYYY 4位数年份 – 在我看来,这总是比一个两位数年份YY,因为没有混淆你指的是什么世纪。
> HH24小时,0 – 23
> MI分钟的小时,0 – 59
> SS秒的分钟,0-59

您可以通过查询V $ NLS_PARAMETERSS查询您当前的语言和日期语言设置,并通过查询V $ NLS_VALID_VALUES查询有效值的全部范围。

进一步阅读

> Format models

顺便说一句,如果你想要计数(*),你需要按employee_id分组

select employee_id,count(*)
  from employee
 where employee_date_hired > date '1995-12-31'
 group by employee_id

这给你每个employee_id的计数。

@H_403_4@ 原文链接:https://www.f2er.com/oracle/208719.html

猜你在找的Oracle相关文章