Sql 来自错误位置的关键字
显示房地产经纪人员工编号、姓名、年薪为年薪、月薪为月薪、年龄为年龄。将月薪四舍五入至小数点后2位。四舍五入到五岁。按员工年龄递减对输出进行排序。如果记录上没有出生日期,则将年龄列为“未知”。 这是我必须回答问题的密码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'),
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_工资“年薪”