Sql 显示10月的星期日雇佣的员工姓名

Sql 显示10月的星期日雇佣的员工姓名,sql,oracle,date-formatting,Sql,Oracle,Date Formatting,我的练习是显示10月份星期日雇佣的员工姓名 select ename,hiredate from emp where to_char(hiredate,'MON')='OCTOBER' AND to_char(hiredate,'DAY')='SUNDAY' 也 显示上季度雇用的所有员工 在oracle中,我们无法使用qq,因此如何为此编写查询?要知道雇佣员工是否在最后一个季度,您可以检查该月是否大于或等于10 对于您的另一个问题,作为statet,MON返回月份的缩写名称。这导致十

我的练习是显示10月份星期日雇佣的员工姓名

select ename,hiredate    from emp   where
to_char(hiredate,'MON')='OCTOBER' AND to_char(hiredate,'DAY')='SUNDAY'

显示上季度雇用的所有员工


在oracle中,我们无法使用qq,因此如何为此编写查询?

要知道雇佣员工是否在最后一个季度,您可以检查该月是否大于或等于10

对于您的另一个问题,作为statet,MON返回月份的缩写名称。这导致十月将不会是周一的输出。你要么在你的任务中缺席一个月,要么你想把它和十月做比较。作为替代方案,您可能会这样做。如果是这样,请记住@ThrostenKettner的评论

select ename,
       hiredate 
from   emp   
where  to_char(hiredate,'MM')=10 
and    to_char(hiredate,'D')=1

你得到的是四分之一。因此,从sysdate获得该季度并计算上一季度:

select ename,hiredate    
from emp   
where to_char(hiredate, 'q') =
  case to_char(sysdate, 'q') 
    when '1' then '4'
    when '2' then '1'
    when '3' then '2'
    when '4' then '3'
  end
and extract(year from hiredate) =
  case when to_char(sysdate, 'q') = '1' then 
    extract(year from sysdate) - 1
  else
    extract(year from sysdate)
  end;
至于10月的星期日,您的查询看起来不错,但数据库依赖英语设置。尽可能使用数字或指定使用的语言:

select ename, hiredate    
from emp   
where to_char(hiredate,'mm') = 10 
and to_char(hiredate, 'FMDAY', 'nls_date_language = american') = 'SUNDAY';
编辑:我刚刚又读了一遍你的问题,然后想:上个季度是什么意思?我猜是之前的那个季度,还是一年中的第四季度?这将是简单的地方,以_charsysdate,'q'='4'


编辑2:必须将“日”更改为“FMDAY”。请参阅Alex Poole的答案以获取解释。

MON date格式是以当前sesison的NLS日期语言表示的缩写月份名称。您可以将缩写与短名称或完整月份名称进行比较:

to_char(hiredate,'MON')='OCT'

默认情况下,会停止添加尾随空格,直到可能的最长值的长度为止。如果不这样做,则必须填充固定值,或修剪结果。注意,对于某些语言,缩写也需要FM进行比较,因为即使它们的长度也可能发生变化;非英语,因为MON和DY值均为3个字符;但例如,法语月份缩写可以是3或4个字符

不过,通常最好使用月份数字:

to_char(hiredate,'MM')='10'
这将使你在任何一年的十月;如果您希望在今年10月加入,您可以包括以下年份:

to_char(hiredate,'YYYYMM')='201510'
或者,如果您需要当前年度的上一个月,您可以使用:

trunc(hire_date, 'MM') = add_months(trunc(sysdate, 'MM'), -1)
一天中也会发生同样的事情;默认情况下,日期格式将填充到最长的日期名称,因此您需要:

to_char(hiredate,'DY')='SUN'

您可以在这里使用日数,但它们也依赖于区域设置。如果要使用名称,请更安全地指定语言:

to_char(hire_date,'FMDAY','NLS_DATE_LANGUAGE=''ENGLISH''')='SUNDAY'

Oracle确实有,固定为日历月,因此1月至3月为第一季度。你可能需要财务部门;或者可能想要前三个月;这是解决这个问题的一种逻辑

请检查是否要使用“全部感谢”

选择ee.*,到_charee.hiredate,'Q'季度 来自雇员 到何处注册,在选择到下一天注册,在选择到上一天注册,在选择到下一天注册,在选择到下一天注册,在选择到下一天注册,在选择到下一天注册,在选择到下一天注册,在选择到上一天注册,在选择到下一天注册
从sql中的EMPLOYEES dd

中,我们可以在datepart中使用qq。但在甲骨文中并没有这样的方法…对吗?在甲骨文中我们不能使用qq,所以如何为此编写查询?qq是什么意思?如果你是说四分之一,那当然可以。但你的要求似乎与季度产量无关。此外,对于day name,请注意TO_CHAR依赖于NLS。如果您没有指定NLS_DATE_语言,则使用不同NLS_DATE_语言的人员将无法使用NLS_DATE_语言。感谢并显示在10月的星期日雇佣的员工姓名?从emp中选择ename,hiredate where to_charhiredate,'MON'='OCT'和to_charhiredate,“DAY”=“SUNDAY”谢谢:小心点,别忘了“D”。您得到的值取决于NLS_区域,因此您的查询不能保证有效。我认为这是一个缺陷,你不能指定ToChChar中的领土,以便得到一个“D”的可靠答复。我在过去被填好的名字绊倒了,完全忘记了这一点。真讨厌。你能再解释一下吗?
to_char(hiredate,'DY')='SUN'
to_char(hiredate,'FMDAY')='SUNDAY'
to_char(hire_date,'FMDAY','NLS_DATE_LANGUAGE=''ENGLISH''')='SUNDAY'