查找今天日期和一列日期之间的年数
Finding the length of years between todays date and a column of dates
我是 sql 的新手,所以这对你们中的一些人来说可能并不难,但我只需要找出显示不同日期的列和今天的日期之间的年数。我不太确定我做错了什么。它给了我错误:ORA-01858:在需要数字的地方发现了一个非数字字符
这是查询
SELECT emp_lname || ', ' || emp_fname || ' ' || emp_initial AS "Employee Full Name",
emp_years,
TO_DATE('emp_hiredate','DD/MM/YYYY') - SYSDATE AS YEARS
FROM emp
我会推荐 months_between()
:
select floor(months_between(sysdate, emp_hiredate) / 12)
你的直接问题,抛出错误的是:
TO_DATE('emp_hiredate','DD/MM/YYYY')
您告诉 TO_DATE 函数,字符串文字 'emp_hiredate' 是日期的字符串表示形式,格式为 'DD/MM/YYYY'。即:
字符串'em'将被解释为月份中的第几天;
字符串 'p' 应为 '/';
字符串 '_h' 将被解释为月份;
字符串 'i' 应为 '/';
字符串 'reda' 将被解释为 4 位数的年份;
它不知道 与 'te'.
有什么关系
我想你的意思是
TO_DATE(emp_hiredate,'DD/MM/YYYY')
请注意 emp_hiredate 而不是 括在引号中,因此表示“emp_hiredate 列的值”。
但请注意,函数 TO_DATE 接受字符串输入并将其转换为 _oracle 的 DATE 数据类型的内部二进制格式。所以这个 假设 emp_hiredate 是日期的 varchar2,字符串文字 表示 ,并且进一步说字符串文字 [=30=日期的 ] 表示 的格式由调用 TO_DATE 的第二个参数指定。如果是这样的话,你就有了严重的设计缺陷。日期应存储为 DATE,而不是 VARCHAR2。
如果emp_hiredate已经是DATE,那么你要的不是TO_DATE,而是TO_CHAR
TO_CHAR(emp_hiredate,'DD/MM/YYYY')
你需要回到SQL参考手册,研究一下TO_DATE和TO_CHAR的区别。另请阅读 this.
我是 sql 的新手,所以这对你们中的一些人来说可能并不难,但我只需要找出显示不同日期的列和今天的日期之间的年数。我不太确定我做错了什么。它给了我错误:ORA-01858:在需要数字的地方发现了一个非数字字符
这是查询
SELECT emp_lname || ', ' || emp_fname || ' ' || emp_initial AS "Employee Full Name",
emp_years,
TO_DATE('emp_hiredate','DD/MM/YYYY') - SYSDATE AS YEARS
FROM emp
我会推荐 months_between()
:
select floor(months_between(sysdate, emp_hiredate) / 12)
你的直接问题,抛出错误的是:
TO_DATE('emp_hiredate','DD/MM/YYYY')
您告诉 TO_DATE 函数,字符串文字 'emp_hiredate' 是日期的字符串表示形式,格式为 'DD/MM/YYYY'。即:
字符串'em'将被解释为月份中的第几天; 字符串 'p' 应为 '/'; 字符串 '_h' 将被解释为月份; 字符串 'i' 应为 '/'; 字符串 'reda' 将被解释为 4 位数的年份; 它不知道 与 'te'.
有什么关系我想你的意思是
TO_DATE(emp_hiredate,'DD/MM/YYYY')
请注意 emp_hiredate 而不是 括在引号中,因此表示“emp_hiredate 列的值”。
但请注意,函数 TO_DATE 接受字符串输入并将其转换为 _oracle 的 DATE 数据类型的内部二进制格式。所以这个 假设 emp_hiredate 是日期的 varchar2,字符串文字 表示 ,并且进一步说字符串文字 [=30=日期的 ] 表示 的格式由调用 TO_DATE 的第二个参数指定。如果是这样的话,你就有了严重的设计缺陷。日期应存储为 DATE,而不是 VARCHAR2。
如果emp_hiredate已经是DATE,那么你要的不是TO_DATE,而是TO_CHAR
TO_CHAR(emp_hiredate,'DD/MM/YYYY')
你需要回到SQL参考手册,研究一下TO_DATE和TO_CHAR的区别。另请阅读 this.