SQL在Select语句中指定日期

时间:2014-10-04 00:19:40

标签: sql oracle date select format

我必须显示任何一年的五月或十一月雇用的所有雇员的雇用日期,最近雇用的雇员首先显示。此外,不包括1994年和1995年雇用的人员。雇用日期应指向该年5月或11月的最后一天(不是确切的一天),并且应采用以下格式: [1996年5月31日]

这是我到目前为止所得到的:

专栏:hire_date 表:员工

SELECT "[" || DATE_FORMAT(hire_date, %M %D %Y) || "]" 
FROM employees 
WHERE hire_date NOT IN ('%-%-94', '%-%-95') 
    AND hire_date in ('%-MAY-%', '%-NOV-%');

但它不起作用 请帮助找到正确的解决方案。

4 个答案:

答案 0 :(得分:2)

以下适用于Oracle:

SELECT '[' || TO_CHAR(HIRE_DATE, 'MM DD YYYY') || ']' AS HIRE_DATE
      FROM EMPLOYEES
      WHERE TO_CHAR(HIRE_DATE, 'YYYY') NOT IN ('1994', '1995') AND
            TO_CHAR(HIRE_DATE, 'MON') IN ('MAY', 'NOV')

SQLFiddle here

分享并享受。

答案 1 :(得分:2)

将日期存储为DATETIMESTAMP数据类型是一个非常糟糕的主意。 更糟糕的是,年份仅由2位数构成。

如果HIRE_DATE是“正确的”数据类型,这是一个解决方案:

SELECT FIRST, LAST, HIRE_DATE, 
  TO_CHAR(LAST_DAY(HIRE_DATE),'"["Month ddTH" of "YYYY"]"') as D
FROM EMPLOYEES
WHERE  EXTRACT(MONTH FROM HIRE_DATE) IN (5,11)
  AND EXTRACT(YEAR FROM HIRE_DATE) NOT IN (1994, 1995)
ORDER BY HIRE_DATE DESC

如果HIRE_DATE是数据类型VARCHAR2,请使用TO_DATE(HIRE_DATE, 'DD-MON-YY')代替HIRE_DATE

请参阅http://sqlfiddle.com/#!4/d93ca/12

答案 2 :(得分:0)

您是否希望将雇用日期显示为该月的最后一天。然后在选择

中使用以下内容
TO_CHAR(LAST_DAY(HIRE_DATE), 'MM DD YYYY')

答案 3 :(得分:0)

hire_date似乎存储为字符,因此您可以使用regexp_like

NOT regexp_like (HIRE_DATE,'\d{2}-[A-Z]{3}-(95|94)')
AND regexp_like (HIRE_DATE,'\d{2}-(MAY|NOV)-\d{2}')