2017-10-19 118 views
0

我正在尝试编写一个SQL语句,该语句仅显示从4月和5月等特定月份雇用的员工以及排除某些年份雇用的员工,但我无法找到在线解释如何做到这一点的任何资源。我正在使用Oracle SQL,所以我使用的YEAR和MONTH命令都会遇到无效标识符。这是我迄今为止所拥有的。将输出限制在某些月份和年份的SQL

SELECT EMPLOYEE_ID, 
     SUBSTR(LAST_NAME || ' ' || FIRST_NAME, 1, 25) AS "Full Name", 
     JOB_ID, 
     TO_CHAR(last_day(hire_date), 'Month fmDd"st" "of" YYYY') AS "Start Date" 
FROM EMPLOYEES 
WHERE HIRE_DATE NOT IN ('01-01-1992' TO_DATE('12-31-1992')); 
+0

任何样本数据? – L30n1d45

+1

这样的事情?: 'SELECT雇员, SUBSTR(LAST_NAME || '' || FIRST_NAME,1,25), “姓名”, JOB_ID, TO_CHAR(聘用日期,“月FMDD “ST” “的” YYYY')AS“开始日期” FROM EMPLOYEES WHERE HIRE_DATE NOT IN('01 -01-1992'TO_DATE('12 -31-1992')) AND TO_NUMBER(TO_CHAR(hire_date,'mm'))in 4,5);' – L30n1d45

+0

这是必要的样本数据吗?我只是想了解你将如何排除某些年份或月份进行搜索,类似于你会怎么只想寻找具有一定职位的员工。 – Glaz

回答

1

这有帮助吗?

SELECT EMPLOYEE_ID, SUBSTR(LAST_NAME || ' ' || FIRST_NAME, 1, 25) AS "Full Name", 
JOB_ID, 
TO_CHAR(hire_date, 'Month fmDd"th" "of" YYYY') AS "Start Date" 
FROM EMPLOYEES 
WHERE HIRE_DATE NOT 
BETWEEN TO_DATE('01-01-1992','MM-DD-YYYY') 
    AND TO_DATE('12-31-1992','MM-DD-YYYY') 
AND TO_NUMBER(TO_CHAR(hire_date,'mm')) in (4,5); 
0

您也可以使用EXTRACT这样的条件。

SELECT employee_id, 
     "full name", 
     "start date" 
FROM (SELECT employee_id, 
       Substr(last_name 
         || ' ' 
         || first_name, 1, 25) AS 
       "Full Name", 
       job_id, 
       To_char(Last_day(hire_date), 'Month fmDd"st" "of" YYYY') AS 
       "Start Date" 
         , 
       Extract (year FROM hire_date) 
         hired_year, 
       Extract (month FROM hire_date) 
       hired_month 
     FROM hr.employees) 
WHERE hired_year NOT IN (1992, 1993) 
     AND hired_month NOT IN (4, 5);