在plsql中执行语句:"SELECT *FROM AC01 WHERE TO_CHAR(TRUNC(TO_DATE('1970-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS')) + (id / 86400), 'YYYY-MM-DD') = '2023-06-13';",于单词id下报红,提示ORA-00904:“ID": 标识符无效
时间: 2024-03-28 14:41:30 浏览: 70
ORA-00904 错误提示说明 "id" 在 AC01 表中不存在或者无效。请确认该表中是否存在 "id" 字段,并且确保该字段的名称拼写正确。
如果该表中确实存在名为 "id" 的字段,也可能是因为您的查询语句中缺少该表的别名。请在查询语句中加上该表的别名,如下所示:
```
SELECT *
FROM AC01 a
WHERE TO_CHAR(TRUNC(TO_DATE('1970-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS')) + (a.id / 86400), 'YYYY-MM-DD') = '2023-06-13';
```
这样就可以使用 "a.id" 指代 AC01 表中的 "id" 字段了。
相关问题
使用该语句未在plsql查询到昨天表新增的记录,场景为表没有时间字段请分析原因给出方法,语句:SELECT *FROM AC01 a WHERE TO_CHAR(TRUNC(TO_DATE('1970-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS')) + (a.ac01_id / 86400), 'YYYY-MM-DD') = '2023-06-12';
根据您提供的SQL语句,可以看出您使用了一个计算时间戳的方法来查询昨天新增的记录,但是这种方法只能在表中有一个表示时间戳的字段时才能使用,对于没有时间字段的表,这种方法是不可行的。
针对没有时间字段的表,可以尝试以下方法查询昨天新增的记录:
1. 使用系统时间
在查询时使用系统时间来计算昨天的日期,例如:
```
SELECT *
FROM AC01
WHERE TRUNC(SYSDATE) - TRUNC(ac01_created_date) = 1;
```
其中,ac01_created_date为您要查询的记录创建日期字段名。
2. 使用Oracle的日志文件
如果您开启了Oracle的日志文件,可以使用以下SQL语句查询昨天新增的记录:
```
SELECT *
FROM AC01
AS OF TIMESTAMP (TRUNC(SYSDATE) - INTERVAL '1' DAY);
```
其中,AC01为您要查询的表名,TRUNC(SYSDATE) - INTERVAL '1' DAY表示昨天的日期。
希望这些方法能够帮助您查询到昨天新增的记录。
在plsql中执行语句:"SELECT *FROM AC01 WHERE DATE_FORMAT(FROM_UNIXTIME(id >> 22), '%Y-%m-%d') = '2023-06-13';" ,于符号">>"下报红,提示缺失右括号
在 PL/SQL 中,">>" 运算符并不是合法的运算符,因此会报错。">>" 运算符在 MySQL 中是位移运算符,而在 PL/SQL 中,位移运算使用的是 "<<", ">>" 运算符。如果您要执行类似的语句,您可以使用以下方式进行位移运算:
```
SELECT *
FROM AC01
WHERE TO_CHAR(TRUNC(TO_DATE('1970-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS')) + (id / 86400), 'YYYY-MM-DD') = '2023-06-13';
```
其中,id / 86400 计算出 id 对应的 Unix 时间戳对应的天数,然后将其转换为 Oracle 的日期格式,并进行比较。这样就可以找到符合要求的记录了。
阅读全文