JasperReports表达式中的字符串比较

JAB*_*JAB 3 jasper-reports

income_source使用以下命令查询名为的数据库字段:

SELECT * FROM table_name WHERE income_source LIKE "salaried%"
Run Code Online (Sandbox Code Playgroud)

这将income_source使用"带薪"前缀检索值.在iReport中,字段的PrintWhenExpression值设置为:

$F{income_source}.equals("Salaried")? Boolean.TRUE:Boolean.FALSE  
Run Code Online (Sandbox Code Playgroud)

为什么报表输出与SQL输出不同?

Dav*_*vis 6

有一些问题:

  • 该值"salaried%"在SQL不同于的值"Salaried"中的表达.
  • 该值"salaried%"使用%匹配字母后面的所有文本d.
  • PrintWhenExpression中有一些冗余.

请尝试以下表达式:

$F{income_source}.startsWith( "salaried" )
Run Code Online (Sandbox Code Playgroud)

要么:

$F{income_source}.trim().toLowerCase().startsWith( "salaried" )
Run Code Online (Sandbox Code Playgroud)

其中一个应该工作.选中null时,您还需要确保为.否则,表达式变为:

$F{income_source} == null ? Boolean.FALSE :
  $F{income_source}.trim().toLowerCase().startsWith( "salaried" )
Run Code Online (Sandbox Code Playgroud)