【问题标题】:SQL specify the date in Select statementSQL 在 Select 语句中指定日期
【发布时间】:2014-11-29 01:41:54
【问题描述】:

我必须显示在任何一年的 5 月或 11 月雇用的所有员工的雇用日期,并首先显示最近雇用的员工。此外,排除 1994 年和 1995 年聘用的人员。聘用日期应指向当年 5 月或 11 月的最后一天(不是确切日期),格式应为: [1996 年 5 月 31 日]

这是我目前得到的:

列:雇用日期 表:员工

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

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

【问题讨论】:

  • 请用您正在使用的 RDBMS 标记您的问题,例如甲骨文、SQL 服务器。
  • hire_date 列的格式为 DD-MON-YY
  • 为什么不是DATE 专栏?

标签: sql oracle date select format


【解决方案1】:

不将日期存储为 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

【讨论】:

  • 我打算发布几乎相同的解决方案。我已编辑您的答案以添加指向相应 SQLFiddle 的链接。
【解决方案2】:

似乎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}') 

【讨论】:

    【解决方案3】:

    以下内容适用于 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

    分享和享受。

    【讨论】:

      【解决方案4】:

      您是否希望将雇用日期显示为当月的最后一天。然后在选择中使用以下内容

      TO_CHAR(LAST_DAY(HIRE_DATE), 'MM DD YYYY')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-23
        • 1970-01-01
        • 2011-01-07
        • 2014-09-26
        • 1970-01-01
        • 2023-03-17
        • 2012-11-24
        • 1970-01-01
        相关资源
        最近更新 更多