但我得到一个错误说“JUN”无效的标识符。请帮助,谢谢!
Select employee_id,count(*) From Employee Where to_char(employee_date_hired,'DD-MON-YY') > 31-DEC-95;
但是,你不是做一个字符串比较;你正在做一个日期比较。您应该将字符串转换为日期。通过使用内置的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_LANGUAGE
和NLS_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_LANGUAGE
,NLS_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查询有效值的全部范围。
进一步阅读
顺便说一句,如果你想要计数(*),你需要按employee_id分组
select employee_id,count(*) from employee where employee_date_hired > date '1995-12-31' group by employee_id
这给你每个employee_id的计数。