连接WHERE子句的变量字符串

时间:2016-02-05 08:27:59

标签: sql firebird

如何在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

1 个答案:

答案 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()函数将其增加所需的数量。