在plsql中执行语句:"SELECT *FROM AC01 WHERE DATE_FORMAT(FROM_UNIXTIME(id >> 22), '%Y-%m-%d') = '2023-06-13';" ,于符号">>"下报红,提示缺失右括号
时间: 2024-03-28 16:41:29 浏览: 15
在 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 的日期格式,并进行比较。这样就可以找到符合要求的记录了。
相关问题
在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": 标识符无效
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" 字段了。
oracle表没有时间列,想查询2023年6月12日的新增数据,请参考该语句"SELECT *FROM table_name WHERE DATE_FORMAT(FROM_UNIXTIME(id >> 22), '%Y-%m-%d') = CURDATE();"通过id获取时间戳的方法编写一个可以在plsql里执行的查询语句。
在 Oracle 中,可以使用以下语句查询指定日期之后的新增数据:
SELECT * FROM table_name
WHERE TRUNC(SYSDATE) <= TRUNC(TO_DATE('2023-06-12', 'YYYY-MM-DD'))
AND TRUNC(SYSDATE) <= TRUNC(TO_DATE('1970-01-01', 'YYYY-MM-DD') + (id/86400))
其中,TRUNC(SYSDATE) 获取当前日期的零点时刻,TO_DATE('2023-06-12', 'YYYY-MM-DD') 将指定日期转换为日期类型,TO_DATE('1970-01-01', 'YYYY-MM-DD') 获取 Unix 时间戳零点时刻对应的日期,id/86400 将 Unix 时间戳转换为 Oracle 中的日期格式。通过比较当前日期和指定日期之后的数据,筛选出新增数据。注意,这里假设 id 字段为 Unix 时间戳,单位为秒。