工作遇到一个场景是,给表导入数据,其中字段 filed1 与 field2 的赋值比较复杂:
- 如果 field1 满足条件等于C11,则 field1 赋值为 V11 且 field2 赋值为 V21;
- 表数据的 field2 内容正则替换为 V22;
- 如果field1 满足条件等于 V11,则 field1 赋值为 V12 且 field2 赋值为 V23。
流程图如下:

hql语句可写为:
select
if(if(field1=C11, V11, field1)=V11, V12, V23) as field1,
if(field1=V11, V23(V22(if(field1=C11, V21, field2))),V22(if(field1=C11, V21, field2))) as field2
from tableA;
梳理后就发现刚刚写的是:
if(field1=V11, V23(V22(if(field1=C11, V21, field2))),field2 ) as field2
--而不是
if(field1=V11, V23(V22(if(field1=C11, V21, field2))),V22(if(field1=C11, V21, field2))) as field2
再一次体会到梳理的益处!!
本文探讨了在HQL中使用复杂的条件语句进行字段赋值的场景,特别是涉及多个条件判断和正则替换的过程。通过梳理和调整,解决了原本逻辑混乱的问题,强调了清晰表达的重要性。
376

被折叠的 条评论
为什么被折叠?



