如何在Firebird中连接where
子句的变量字符串?
我有两个变量类型SMALLINT
。在while循环中迭代一次后,这些变量会递增。
根据这些变量,我为DATE
创建了where
- >在SQL中的选择之间,这样的事情(这是我无效的尝试):
yearmin=extract (year from DATAMIN);
yearmax=extract (year from DATAMAX);
monthmin=extract (month from DATAMIN);
monthmax=extract (month from DATAMAX);
aktyear=rokmin;
actmonth=monthmin;
while (actyear<=yearmax and actmonth<=monthmax) DO
BEGIN
SELECT
[...]
WHERE (g.GDATAP BETWEEN (:actyear || :actmonth || 01) AND ( :actyear || :actmonth || 30))
[...]
INTO :Zaw,:Sum;
actyear=actyear+1;
actmonth=actmonth+1;
SUSPEND;
end
答案 0 :(得分:2)
||
是string concatenator运算符,但在表达式g.GDATAP BETWEEN (:actyear || :actmonth || 01)
中,您没有字符串而是整数。 Firebird不会为您进行类型转换。因此,要使其工作,您必须转换为(var)char,类似
cast(:actyear as varchar(4)) || cast(:actmonth as varchar(2)) || '01'
您可能还需要添加日期分隔符,即
cast(:actyear as varchar(4)) || '-' || cast(:actmonth as varchar(2)) || '-01'
我不记得Firebird接受的格式......
看起来你在循环中构造这些日期,所以最好在循环之前初始化开始日期,然后使用DATEADD()
函数将其增加所需的数量。