Power BI Oracle OLEDB 需要一个 where 子句来获取一年的第一天

Power BI Oracle OLEDB need a where clause to get the first day of the year

使用 Power BI 连接到 Oracle 数据库服务器 19c 使用此连接:provider=OraOLEDB.Oracle.1;data source=gencdbp.domain.pri:1521/GAEN

我需要一个 SQL 语句来限制行数,这样我就不必对其进行硬编码。

这个有效:

select * from aTable where DateCreated >= TO_Date('01/01/2022', 'MM/DD/YYYY')

Year函数和TRUNC函数我都试过了。这两个都给我一个错误: DateCreated 是一个时间戳 (6)。这些不起作用:

where DateCreated >= trunc(sysdate, 'YEAR')
where trunc(DateCreated, 'YEAR') = trunc(sysdate, 'YEAR')
YEAR(DateCreated) = YEAR(sysdate)

这些都给我这个错误: ORA-00904: “YEAR”: 无效标识符 细节: DataSourceKind=OleDb DataSourcePath=数据源=gencdbp.domain.pri:1521/GAEN;provider=OraOLEDB.Oracle.1 Message=ORA-00904:“YEAR”:无效标识符 ORA-00904: “YEAR”: 无效标识符 错误代码=-2147217900

我不知道您使用的工具 (Power BI),但是 - 请查看以下示例:

样本 table 包含一列,其数据类型与您指定的列相匹配:

SQL> create table test (datecreated timestamp(6));

Table created.

插入示例值:

SQL> insert into test values (systimestamp);

1 row created.

好的,现在让我们尝试您所说的不起作用(但会引发 ORA-00904):

SQL> select * from test where trunc(datecreated, 'year') = trunc(sysdate, 'year');

DATECREATED
---------------------------------------------------------------------------
11-MAY-22 09.47.30.544000 PM

对我来说没问题。

另一个选项可能是 extract 函数:

SQL> select * from test where extract(year from datecreated) = extract(year from sysdate);

DATECREATED
---------------------------------------------------------------------------
11-MAY-22 09.47.30.544000 PM

所以,你确定你真的使用了你发布的代码吗?因为,这个错误表明 table 中没有名为 year 的列。为了模拟它,我删除了 year 的单引号(这是 - 对于 to_char 函数 - 格式模型):

SQL> select * from test where trunc(datecreated, year) = trunc(sysdate, year);
select * from test where trunc(datecreated, year) = trunc(sysdate, year)
                                                                   *
ERROR at line 1:
ORA-00904: "YEAR": invalid identifier


SQL>

对;在这里,ORA-00904。