Previous topicNext topic
WebBuilderX > 子页面组件元素 > 表格类元素 > 列表达式 > 表达式方式创建 >
运算符

SQL语句最常用的运算符主要包括3大类:算术运算符、比较运算符和连接运算符。

+(加)、-(减)、*(乘)、/(除)四个运算符在任何种类的数据源中都可使用,但%(取余数)只能用在SQLServer数据源中,Access取余数要使用函数Mod。

具体包括:=(等于)、<(小于)、>(大于)、<=(小于等于)、>=(大于等于)、<>(不等于)、In(包含)、Like(匹配)。其中,In和Like前面也可以加上Not表示不在指定的值中。

但有以下几点需要注意:

第一,对于日期型列,如果是Access数据源,要用#号;如果是SQLServer数据源,则要用单引号。
    例如,当在Access数据源中要根据日期列生成“已过期”或“未过期”的表达式列,可以参考这样设置:
    iif([日期]>= #2000-1-8#,'已过期','未过期')

第二,当使用like匹配比较时,可使用通配符“%”表示零个或多个字符,用“_”表示任意的单个字符。例如:
    [产品id] like 'p%1'
    再如,要在条件判断中对第一个字符是P、而且后面只有两个字符的数据记录进行条件操作,可以连续使用两个下划线:
    [产品id] like 'P__'
    很显然,字符长度小于3或者大于3的记录都不会被匹配。
    如果要匹配本身就包含有通配符的记录,要把通配符使用中括号包起来。例如,以下语句将仅对包含“%”符号的数据记录进行操作:
    [产品id] like 'P[%]%'

第三,中括号也可以匹配任意的单个字符,且能同时限定范围。例如,仅匹配“产品id”中第3个字符等于4、5或a、b、c中任意一个字符的记录:
    [产品id] like 'p0[45abc]'
    由于这里的数字或字符都是连续的,因此也可以写成:[4-5a-c]。
    如果想匹配不包含在这些字符中的记录,Access数据源可在前面加上叹号。例如:[!4-5a-c];SQLServer数据源要加上尖号,例如:[^4-5a-c]。

第四,SQLServer数据源还可使用“!= ”表示不等于,它和“<>”的作用相同。

具体包括:+、()、And、Or和BETWEEN。其中,用And串联的条件表达式必须同时满足,Or串联的条件表达式只需满足一个即可。计算表达式值的时候,And优先于Or,也可以使用括号组合表达式来强制改变优先级。
    例如,将“产品ID”和“客户ID”列拼接在一起:
    [产品ID] + [客户ID]
   
对于Access数据库,除了“+”以外,还可使用“&”拼接字符串。两者的区别在于:“+”只能拼接字符型的数据,而“&”还可将其他类型数据自动转为字符串再做拼接。例如:
    [产品ID] & [数量] & [日期]
    “&”连接符仅限于Access数据库,SQLServer必须将其他类型数据转为字符串之后再使用“+”拼接。

    再如,根据组合条件进行判断:
    iif(year([日期])=2000 and [客户id]='C01','XXX','YYY')
    对于区间型的范围比较,可使用BETWEEN运算符,起始值和终止值要用and连接。例如,对2000年1月份的订单进行操作,如果使用之前的比较运算符,写法如下:
    iif([日期]>=#2000-1-1# and [日期]<=#2000-1-31#,'2000年1月份','其他时间')
    如改用BETWEEN,可以这样写:
    iif([日期]between #2000-1-1# and#2000-1-31#,'2000年1月份','其他时间')
    再如,对“折扣”在0.1到0.2之间的数据记录进行操作:
    iif([折扣] between 0.1 and 0.2,'太低了','还行')
    这里同样可以使用NOT进行反向操作。例如:
    iif([折扣] not between 0.1 and 0.2,'还行','太低了')