Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 来自错误位置的关键字_Sql_Oracle - Fatal编程技术网

Sql 来自错误位置的关键字

Sql 来自错误位置的关键字,sql,oracle,Sql,Oracle,显示房地产经纪人员工编号、姓名、年薪为年薪、月薪为月薪、年龄为年龄。将月薪四舍五入至小数点后2位。四舍五入到五岁。按员工年龄递减对输出进行排序。如果记录上没有出生日期,则将年龄列为“未知”。 这是我必须回答问题的密码 select st_staffno, st_name, st_salary "Annual Salary",(st_salary/12) as "Monthly Salary" decode (st_birthdate, null, 'unknown'),

显示房地产经纪人员工编号、姓名、年薪为年薪、月薪为月薪、年龄为年龄。将月薪四舍五入至小数点后2位。四舍五入到五岁。按员工年龄递减对输出进行排序。如果记录上没有出生日期,则将年龄列为“未知”。 这是我必须回答问题的密码

select st_staffno, st_name, st_salary "Annual Salary",(st_salary/12) as "Monthly Salary"   
    decode (st_birthdate, null, 'unknown'), 
    round sysdate ((st.birthdate)/365.25,0) as "Age"
from staff
order by "Age" desc;

它返回一个From关键字not found where预期错误。

您只需要一个立即括号
在round之后,因为round是一个类似


.round(sysdate/362.25,0)
并检查评估年龄列的逻辑。它应该是一些解码条件,如
。decode(birthdate,round(sysdate..ontrue),null(onfalse)
您只需要一个立即括号
在round之后,因为round是一个函数,如


.round(sysdate/362.25,0)
并检查评估年龄列的逻辑。它应该是一些解码条件,如
。decode(birthdate,round(sysdate..ontrue),null(onfalse)
您应该用正在使用的DBMS标记SQL问题。从
decode
我推断它是Oracle。您得到
ORA-00923当查询解析器认为
SELECT
子句已完成,但没有
FROM
关键字跟随时,“FROM keyword not found where expected”
,那么是什么让DBMS认为
SELECT
子句已结束?这通常发生在所选表达式之间缺少逗号时

你的错误:

  • 后面缺少一个逗号作为“月薪”
  • 你的年龄计算在语法上是错误的
  • 您正在使用
    st.birthdate
    ,但查询中没有
    st
    表名或别名。我假设列名是
    st\u birthdate
  • 更正的查询:

    select
      st_staffno,
      st_name,
      st_salary as "Annual Salary",
      st_salary / 12 as "Monthly Salary"   
      decode(st_birthdate, null, 'unknown'), 
      round((sysdate - st_birthdate) / 365.25, 0) as "Age"
    from staff
    order by "Age" desc;
    
    当时,您也可以使用标准SQL的大小写,而不是
    DECODE
    。如果要字面上应用“然后将年龄列为未知”,您必须组合最后两个表达式。您缺少“将月工资四舍五入到小数点后两位”

    最后:我们通常不会根据一年的实际长度来计算年龄。4月1日出生时,我们会在每年的4月1日午夜变大一岁

    extract(year from sysdate) - extract(year from st_birthdate) -
    case when to_char(sysdate, 'mmdd') < to_char(st_birthdate, 'mmdd')
      then 1 else 0 
    end as "Age"
    
    extract(从sysdate算起的年份)-extract(从st_生日算起的年份)-
    当to_char(sysdate,'mmdd')
    你应该用你正在使用的DBMS标记SQL问题。从
    解码
    我推断这是Oracle。你从关键字中得到的
    ORA-00923“未在预期位置找到”“
    ,当查询解析器认为
    SELECT
    子句已完成,但没有
    FROM
    关键字跟随时。那么,是什么使DBMS认为
    SELECT
    子句已结束?这通常发生在所选表达式之间缺少逗号时

    你的错误:

  • 后面缺少一个逗号作为“月薪”
  • 你的年龄计算在语法上是错误的
  • 您正在使用
    st.birthdate
    ,但查询中没有
    st
    表名或别名。我假设列名是
    st\u birthdate
  • 更正的查询:

    select
      st_staffno,
      st_name,
      st_salary as "Annual Salary",
      st_salary / 12 as "Monthly Salary"   
      decode(st_birthdate, null, 'unknown'), 
      round((sysdate - st_birthdate) / 365.25, 0) as "Age"
    from staff
    order by "Age" desc;
    
    当时,您也可以使用标准SQL的大小写,而不是
    DECODE
    。如果要字面上应用“然后将年龄列为未知”,您必须组合最后两个表达式。您缺少“将月工资四舍五入到小数点后两位”

    最后:我们通常不会根据一年的实际长度来计算年龄。4月1日出生时,我们会在每年的4月1日午夜变大一岁

    extract(year from sysdate) - extract(year from st_birthdate) -
    case when to_char(sysdate, 'mmdd') < to_char(st_birthdate, 'mmdd')
      then 1 else 0 
    end as "Age"
    
    extract(从sysdate算起的年份)-extract(从st_生日算起的年份)-
    当to_char(sysdate,'mmdd')
    第一行末尾缺少一个
    (在
    之后为“月薪”
    )一个很好的sql调试技术是开始删除部分查询,直到它成功运行。这将帮助您缩小到导致语法错误的部分。选择st_staffno,st_name,st_Salary“年薪”,四舍五入(st_salary/12,0)作为“月薪”,将(st_birthdate,null,'unknown',(round((sysdate-st_birthdate)/365.25,0))从员工订单中按“Age”描述解码为“Age”;将st_salary“年薪”更改为st_salary作为“年薪”,您在第一行末尾缺少一个
    (在
    之后作为“月薪”
    )一种很好的sql调试技术是开始删除部分查询,直到查询成功运行。这将帮助您缩小到导致语法错误的部分。请选择st_staffno、st_name、st_salary“年薪”,四舍五入(st_salary/12,0)为“月薪”,解码(st_birthdate,null,'unknown',(四舍五入((sysdate-st_birthdate)/365.25,0)根据“年龄”说明将员工订单中的“年龄”改为“年龄”;将st_工资“年薪”改为st_工资“年薪”