试图在Powerbuilder中做一个Case语句

时间:2014-12-22 15:18:40

标签: case powerbuilder

试着在powerbuild中做一个简单的案例功能。

我有一张桌子 client_notes A!,B!,C!

case(client_notes'%A!%'然后'Cash1'否则“Cash2”)

它编译好,但是当我运行它时,它说Cash2。

不应该说Cash1吗?

3 个答案:

答案 0 :(得分:2)

这里的背景是什么?这是在PowerScript中还是在数据窗口表达式中,还是在数据窗口的SQL源中?

您使用的是什么版本/版本的PB?

它应该"说" [原文如此]全部取决于" client_notes"在运行时。它只返回字符串' Cash1'当client_notes的值完全等于字符串'%A!%'。

您针对哪些数据运行?显示一些样本数据。

-Paul Horan -

答案 1 :(得分:0)

我从未见过" LIKE"在表达画家中使用的表达,但它可能是可能的。我快速尝试了一下,但是无法做到。我同意马特所说的,除了你的表达没有重要的" LIKE"关键字所以它恰好匹配你的字符串,当然不匹配所以总是得到Cash2。

我想使用>或者<在之前的CASE陈述中也存在问题,WHEN似乎非常“愚蠢”。并且无法处理除值之外的任何其他内容。

这种作品不如案例陈述那么优雅。

if ( client_notes like '%A!%' , 'Cash1', 
   if ( client_notes like '%B!%' , 'Cash2', 
      if ( client_notes like '%C!%' , 'Cash3', 
        'Cash?' ) ) )

程序员不喜欢什么挑战?这些都不起作用,但你可能会得到我正在经历的思考过程。

case ( ('%' + client_notes + '%') when (like 'A1') then 'Cash1' else 'Cash2' )
case ( '%A1%' when (like 'A1') then 'Cash1' else 'Cash2' )
case ( ( '%bbb%' like 'A1' ) when true then 'Yah' else 'Nah' )

CASE上没有雪茄......

你可以使用全局函数,但是你也可以编写一个数据库函数,它并没有真正解决你想要做的事情。我记得想不止一次在CASE声明中使用,我不记得让它发挥作用。我还记得在' 4:20'然后'庆祝'何时> ' 4:20'然后“太晚了”#39;否则'以后'

这会编译但不认为它会起作用,因为比较变量需要不同。

case( if ( client_notes like '%' + client_notes + '%', client_notes , 'X') 
    when 'A1' then 'Cash1' 
    when 'A2' then 'Cash2' 
    else 'use nested if instead')

答案 2 :(得分:0)

好吧,如果您想将其作为数据窗口计算字段进行尝试,可以使用“强力”方法。

CASE (client_notes  
WHEN 'A!' THEN 'Cash'  
WHEN 'A!, B!' THEN 'Cash, Check'  
WHEN 'A!, B!, C!' THEN 'Cash, Check, Money Order'  
WHEN 'A!, B!, C!, D!' THEN 'Cash, Check, Money Order, Card'  
WHEN 'B!' Then 'Check'  
...  
Else '')

在RetrieveRow事件中,它可能如下所示:

string ls_result = ''  
string ls_client_notes  

If row > 0  then  
   ls_client_notes = this.getItemString( row, 'client_notes')  

   If pos( ls_client_notes, 'A!' ) > 0  then  ls_result = 'Cash'  
   If pos( ls_client_notes, 'B!' ) > 0  then  
      If len( ls_result ) > 0  then  
         ls_result += ', Check'  
      Else  
         ls_result = 'Check'  
      End if  
   End if  
   If pos( ls_client_notes, 'C!' ) > 0  then  
      If len( ls_result ) > 0  then  
         ls_result += ', Money Order'  
      Else  
         ls_result = 'Money Order'  
      End if  
   End if  
   If pos( ls_client_notes, 'D!' ) > 0  then  
      If len( ls_result ) > 0  then  
         ls_result += ', Card'  
      Else  
         ls_result = 'Card'  
      End if  
   End if  

   this.setItem( row, 'client_notes', ls_result ) // if you want it back in the same column  

End if

-Paul -