Sql 如何编写查询以显示生产日期指定为2010年的手机?

Sql 如何编写查询以显示生产日期指定为2010年的手机?,sql,oracle,sql-date-functions,Sql,Oracle,Sql Date Functions,基于这个表,我编写了一个查询来显示生产日期在2010年之前的手机 SELECT ime_no, model_name, manufacturer, date_of_manufac FROM mobileinfo WHERE date_of_manufac < 2010; 但是,发生了错误 第3行错误: ORA-00932:不一致的数据类型:预期日期获取编号 请帮助我解决此错误和查询,以显示生产日期在2010年之前的手机 select ime_no,model_name,m

基于这个表,我编写了一个查询来显示生产日期在2010年之前的手机

SELECT
  ime_no,
  model_name,
  manufacturer,
  date_of_manufac
FROM mobileinfo
WHERE date_of_manufac < 2010;
但是,发生了错误

第3行错误:

ORA-00932:不一致的数据类型:预期日期获取编号

请帮助我解决此错误和查询,以显示生产日期在2010年之前的手机

select ime_no,model_name,manufacturer,date_of_manufac
from mobileinfo
where STR_TO_DATE(DATE_FORMAT(date_of_manufac,%Y),%Y)<2010;
在这里,我添加了函数和

尝试上面的查询

在这里,我添加了函数和


尝试上述查询。

一种方法是从日期中提取年份:

where extract(year from date_of_manufac) < 2010;
更一般地说,只需使用日期比较:

where date_of_manufac < date '2010-01-01'

这是最好的,因为它可以使用列上的索引-如果有索引并且索引的使用适合查询。

一种方法是从日期提取年份:

where extract(year from date_of_manufac) < 2010;
更一般地说,只需使用日期比较:

where date_of_manufac < date '2010-01-01'

这是最好的,因为它可以使用列上的索引-如果有索引,并且索引的使用适合查询。

如果您实际给它一个日期,比如“2010-1-1”,它会高兴吗?也是MySQL还是Oracle?@SamiKuhmonen。ORA错误来自Oracle,而不是MySQL。@GordonLinoff我知道。只是想帮助询问者意识到问题中不应该有不正确的标签。哦。。。MySQL的答案是正确的,对于代码在Oracle而不是MySQL中的问题?这是怎么回事?如果你真的给它一个约会,比如“2010-1-1”,它会高兴吗?也是MySQL还是Oracle?@SamiKuhmonen。ORA错误来自Oracle,而不是MySQL。@GordonLinoff我知道。只是想帮助询问者意识到问题中不应该有不正确的标签。哦。。。MySQL的答案是正确的,对于代码在Oracle而不是MySQL中的问题?这是怎么回事?鉴于OP的NLS_DATE_格式,您的第二个查询将无法使用ORA-01843:无效月份。使用'01-JAN-10'或强制日期转换<至'01-01-2010','DD-MM-YYYY'@LauDec。要将日期值指定为文字,必须使用公历。您可以指定一个ANSI文本,如本例所示:日期“1998-12-25”。您完全正确。我错过了文字前的日期关键字。谢谢你的澄清。我的评论仅适用于省略日期给定OP的NLS_DATE_格式,您的第二个查询将无法使用ORA-01843:无效月份。使用'01-JAN-10'或强制日期转换<至'01-01-2010','DD-MM-YYYY'@LauDec。要将日期值指定为文字,必须使用公历。您可以指定一个ANSI文本,如本例所示:日期“1998-12-25”。您完全正确。我错过了文字前的日期关键字。谢谢你的澄清。我的评论仅适用于省略OP使用Oracle的日期的情况,可能最初标记不正确,但错误消息ORA-。。。很清楚。OP使用Oracle可能最初标记不正确,但错误消息ORA-。。。这是清楚的。