在 SAP HANA 中将 IN 运算符与变量一起使用
Using IN operator with a variable in SAP HANA
我正在尝试使用变量作为 WHERE
条件的输入,该条件具有使用 SAP HANA 的 IN
子句。
例如:
DO
BEGIN
DECLARE a VARCHAR(100) = '1000,1001';
DECLARE b NVARCHAR(100) ARRAY = ARRAY('1000','1001');
DECLARE c TABLE (valuelist NVARCHAR(100));
--SELECT '1001' INTO valuelist FROM :c;
--:c.INSERT('1001','1000');
DECLARE e NVARCHAR(100) = ' ''1000'',''1001'' ';
DECLARE f NVARCHAR(100) = '"STATIONID" IN (''1000'',''1001'')';
select
STATIONID
from MY_TABLE
where STATIONID IN ('1000','1001') -- working fine, but want to use a variable here
-- where STATIONID IN (:a)
-- where STATIONID IN (:b)
-- where STATIONID IN :c
-- where :f
order by STATIONID;
END
然而,我所有的尝试,你可以在上面看到其中的一些,在我的条件下有多个值时都失败了。 STATIONID
确实是一个字符串字段。
关于如何执行此操作的任何提示?
最后我想出了如何通过 UNNEST
将 variable array
与 variable table
一起使用。这工作得很好:
DO
BEGIN
DECLARE STATION_TMP_ARRAY NVARCHAR(10) ARRAY = ARRAY('1000','1001','1002','1003','1004');
DECLARE STATION_TMP_TABLE TABLE ("tmp_stationid" NVARCHAR(10)) = UNNEST(:STATION_TMP_ARRAY) AS ("tmp_stationid");
select
STATIONID
from MY_TABLE
where "STATIONID" IN (SELECT "tmp_stationid" FROM :STATION_TMP_TABLE)
order by STATIONID;
END
我正在尝试使用变量作为 WHERE
条件的输入,该条件具有使用 SAP HANA 的 IN
子句。
例如:
DO
BEGIN
DECLARE a VARCHAR(100) = '1000,1001';
DECLARE b NVARCHAR(100) ARRAY = ARRAY('1000','1001');
DECLARE c TABLE (valuelist NVARCHAR(100));
--SELECT '1001' INTO valuelist FROM :c;
--:c.INSERT('1001','1000');
DECLARE e NVARCHAR(100) = ' ''1000'',''1001'' ';
DECLARE f NVARCHAR(100) = '"STATIONID" IN (''1000'',''1001'')';
select
STATIONID
from MY_TABLE
where STATIONID IN ('1000','1001') -- working fine, but want to use a variable here
-- where STATIONID IN (:a)
-- where STATIONID IN (:b)
-- where STATIONID IN :c
-- where :f
order by STATIONID;
END
然而,我所有的尝试,你可以在上面看到其中的一些,在我的条件下有多个值时都失败了。 STATIONID
确实是一个字符串字段。
关于如何执行此操作的任何提示?
最后我想出了如何通过 UNNEST
将 variable array
与 variable table
一起使用。这工作得很好:
DO
BEGIN
DECLARE STATION_TMP_ARRAY NVARCHAR(10) ARRAY = ARRAY('1000','1001','1002','1003','1004');
DECLARE STATION_TMP_TABLE TABLE ("tmp_stationid" NVARCHAR(10)) = UNNEST(:STATION_TMP_ARRAY) AS ("tmp_stationid");
select
STATIONID
from MY_TABLE
where "STATIONID" IN (SELECT "tmp_stationid" FROM :STATION_TMP_TABLE)
order by STATIONID;
END