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。
使用 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。