Advertisement
Advertisement

新足迹

 找回密码
 注册
新足迹 › 门户 › AI 相关› 查看内容

简单SQL 问题,求解(有分加)

2011-8-12 21:41| 发布者: jungle | 查看: 3119| 原文链接

数据库SQL SERVER 2008. 现在需要使用MICROSTRATEGY的FREE SQL 模式在SQL SERVER执行以下简单SQL语句:

Select * from Sales where SaleDate>= Date_From

Date_From是由Microstrategy控制的一个变量,与前台用户界面上的一个Date Picker控件绑定,无法人为改写。当前台用户界面上的Date Picker有值时,它会返回一个表示日期的字符串值,比如'2011-08-12'(注意:单引号也包含在返回的字符串内);当前台用户界面上的Date Picker为空时,它会返回一个空字符串。Microstrategy只对上述SQL语句中的变量进行简单的字符串替换后,即传递给SQL SERVER执行。

显然,当前台Date Picker为空时,我希望返回所有记录,所以我这样组织SQL:
Select * from Sales where (Date_From='' or SaleDate>= Date_From)

该SQL 在Date Picker有值时正常执行,其变量替换后结果是:
Select * from Sales where ('2011-08-01'='' or SaleDate>'2011-08-01')

但在无值时报语法错误,因为此时SQL语句变成了
Select * from Sales where (='' or SaleDate>)

好吧,那我给它加上两个单引号。现在我这样组织SQL:
Select * from Sales where ('Date_From'='' or SaleDate>= 'Date_From')

结果反过来了,在无值时可以正常执行,而在有值时报语法错误,因为此时SQL变成了
Select * from Sales where (''2011-08-01''='' or SaleDate>''2011-08-01'')

那么如何才能构造一个SQL,使其在两种情况下均可以正常执行?
显然,如果Microstrategy 能在界面DatePicker为空时返回'' 而非空字符串,该问题就可以解决(或者使其在有值时返回的日期字符串两头不加单引号,也可以解决)。但是现在确实无法控制MicroStrategy的行为,我们只能构建SQL,而它来替换变量。这个问题能解决么?
Advertisement
Advertisement


Advertisement
Advertisement
返回顶部