执行时:
select *
from emp
where to_char(hiredate ,'yy')='13';
此查询位于oracle10g中,正在发出错误,因为"无效的数字"指着hiredate。
我的表格描述是:
NO NUMBER(10)
NAME VARCHAR2(15)
JOB VARCHAR2(10)
COMPANY VARCHAR2(15)
SALARY NUMBER(10)
DEPTNO NUMBER(5)
HIREDATE VARCHAR2(15)
答案 0 :(得分:2)
列HIREDATE
已经是字符串,而不是日期。您不想在其上使用to_char()
。
相反,您希望使用字符串函数,但这取决于格式。类似的东西:
where HIREDATE like '%13'
答案 1 :(得分:2)
您可能希望将HIREDATE
更改为键入DATE
并使用您的SQL语句,它应该可以正常工作。这样,您就可以将HIREDATE
用于需要数据类型为DATE
的其他目的。
答案 2 :(得分:1)
如果您想坚持Date Data Type
,则必须将HIREDATE
列从Date
转换为VARCHAR2
。所以你可以尝试这个解决方案。
假设您将HIREDATE
中的数据设为28-02-2013
,则查询将为:
SELECT * FROM emp WHERE To_CHAR(TO_DATE(HIREDATE,'dd-MM-YY'),'YY')='13';
'dd-MM-YY'
取决于您的HIREDATE
数据,
因此,在此处您必须先使用To_DATE
函数转换列,然后再从中提取Year
(如果您不想按照建议使用`where HIREDATE like '%13'
之前是@Gordon Linoff
)。
答案 3 :(得分:0)
HIREDATE是VARCHAR2而to_char(xxx,'yy')期待日期或时间戳数据类型
答案 4 :(得分:0)
选择* 来自emp 其中to_char(to_date(hiredate,'DD / MM / YYYY'),'yy')='13';