update语句怎么过滤掉最后一个逗号

UPDATE
  zyzuser
SET
#if(null!=zyzName&&zyzName!='')
  zyzName = '#(zyzName)',
#end
#if(null!=sex&&sex!='')
  sex = '#(sex)',
#end
#if(null!=zjzx&&zjzx!='')
  zjzx = '#(zjzx)',
#end
#if(null!=zjPic&&zjPic!='')
  zjPic = '#(zjPic)',
#end
#if(null!=zjCode&&zjCode!='')
  zjCode = '#(zjCode)',
#end
#if(null!=tel&&tel!='')
  tel = '#(tel)',
#end
#if(null!=logo&&logo!='')
  logo = '#(logo)',
#end
#if(null!=address&&address!='')
  address = '#(address)',
#end
WHERE zyzId = '#(zyzId)';


评论区

dcdc

2019-07-31 14:47

这样执行的话 where前面会多一个逗号报错

JFinal

2019-07-31 15:21

定义一个函数解决:
#define comma()
#if ( firstTime == null) #set(firstTime=true) #end
#if (firstTime) #set(firstTime = false) #else , #end
#end

用的时候这样:
UPDATE
zyzuser
SET
#if( zyzName && zyzName != '' )
#@comma() zyzName = '#(zyzName)'
#end
#if(sex && sex !='' )
#@comma() sex = '#(sex)'
.....

当然,你这样多个 if 的用法并不赞同,对这种情况定义一个函数传参搞定是最好的

年轻人

2020-01-06 10:32

@JFinal 波总这里说的定义一个函数传参指的是?有空可以描述详细一点吗?感谢~

JFinal

2020-01-06 12:00

@年轻人
先定义一个模板函数
#define updateColums(cols)
#for ( x : cols )
#(for.first ? "", ",") #if( x && x != '' ) #(x) = '#(x)' #end
#end

用的时候这样:
#sql(...)
UPDATE zyzuser SET #@updateColums(cols)
#end

其中 cols 是 getSqlPara 或者 template 方法传递过来的参数

年轻人

2020-01-06 13:59

@JFinal 好的,感谢波总,学到了~
#define updateColums(cols)
#for(x : cols)
#(for.first ? "" : ",") #(x.key) = '#(x.value)'
#end
#end

#sql("update_detail")
UPDATE T_SAL_ORDERENTRY SET #@updateColums(updateCols)WHERE FENTRYID = #(entryId)
#end

JFinal

2020-01-06 16:05

@年轻人 where 加上了,这个是必须的, 赞