where 1=1子句

我有一张客户表,定义了两个数据集参数:S_ID代表起始ID号,E_ID代表结束ID号,想实现如果S_ID或E_ID用户没有输入时,就显示整张数据表,有输入时就显示起始ID到结束ID的客户信息。比如我有1到100号客户代码,如果起始ID输入2,结束ID输入20,应该显示2到20的客户信息,如果起始ID与结束ID都不输入,应该显示所有客户信息,

我的代码如下,现在的问题是无论始ID输入与结束ID如何输入,都显示所有客户信息。

不知道问题出在什么地方,求助大家

select * from 客户表 

where 1=1 ${if(len(S_ID)==0|len(E_ID)==0,"","and 客户ID between '"+S_ID+"and '"+E_ID+"'")} 


FineReport rjfsrb4 发布于 2019-1-19 20:59 (编辑于 2019-1-20 14:41)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共7回答
最佳回答
0
正新-雪物语Lv6中级互助
发布于2019-1-20 14:33(编辑于 2019-1-20 16:05)

SELECT * FROM `s_e_id` where 1=1 ${if(len(S_ID)==0||len(E_ID)==0,"","and id"+" between '"+S_ID+"' and '"+E_ID+"'")} 

把里面的id 改成你的 数据库字段名 就是你的 客户ID 表名也改一下



SELECT * FROM `s_e_id` where 1=1 ${if(len(S_ID)==0||len(E_ID)==0,"","and id between '"+S_ID+"' and '"+E_ID+"'")}  这个也可以,我那个id后加引号应该是多此一举了,两个我都测试了,能出结果


1.png


  • rjfsrb4 rjfsrb4(提问者) 你的代码我和的一样呀
    2019-01-20 14:36 
  • 正新-雪物语 正新-雪物语 回复 rjfsrb4(提问者) 不是,多了个单引号
    2019-01-20 14:37 
  • 正新-雪物语 正新-雪物语 回复 rjfsrb4(提问者) 楼主看下有没有用?没用的话也说下吧,我没测,,诶
    2019-01-20 14:42 
  • rjfsrb4 rjfsrb4(提问者) 回复 正新-雪物语 测试了,还是不行
    2019-01-20 14:46 
最佳回答
0
兰色毒药Lv0见习互助
发布于2019-1-19 22:16

设计器里不是有日志吗,看看生成的sql语句能运行成功吗

最佳回答
0
myseanLv3初级互助
发布于2019-1-21 08:05

INT 不需要单引号。而且后面还缺一个

 都查出来。是不是你参数名称弄错了。

  • 正新-雪物语 正新-雪物语 我试了一下,不加单引号出来了,加了也出来了,要不您试试看?
    2019-01-21 08:48 
  • mysean mysean 回复 正新-雪物语 要不都要加。要不都不加。INT型无所谓 参数名称没问题吗?
    2019-01-21 08:59 
  • 正新-雪物语 正新-雪物语 回复 mysean 在参数面板设了两个模板参数,我应该是你说的,都加了单引号的,然后说缺了一个?哪边的缺了呀?我盯着看好久,愣是没看出来
    2019-01-21 09:02 
  • mysean mysean 回复 正新-雪物语 \'\"+S_ID+\"and 这里少了单引号 and 前面加个空格
    2019-01-21 09:03 
  • 正新-雪物语 正新-雪物语 回复 mysean between \'\"+S_ID+\"\' and \'\"+E_ID+\"\' 没少吧。。。。。
    2019-01-21 09:14 
最佳回答
0
黄源Lv6中级互助
发布于2019-1-21 08:49

where 1=1 ${if(isunll(S_ID)||isnull(E_ID),""," and ID >="+S_ID+" and ID <="+E_ID)} 

最佳回答
0
No1-格调Lv6初级互助
发布于2019-1-21 09:09(编辑于 2019-1-21 09:10)

where 1=1 ${if(len(S_ID)==0|len(E_ID)==0,"","and 客户ID between '"+S_ID+"'and '"+E_ID+"'")} 

你的S_ID那里缺一个单引号

最佳回答
0
cherishdqyLv7高级互助
发布于2019-1-21 09:43(编辑于 2019-1-21 09:44)

判断条件或是||,是两个|

你的判断条件是两个参数只要有其中一个为空就是查询全部

后面的条件根据你的参数类型来加单引号

整型:" and 客户ID between "+S_ID+" and "+E_ID

字符串:" and 客户ID between '"+S_ID+"' and '"+E_ID+"'"

最佳回答
0
flyingsnakeLv6资深互助
发布于2019-1-21 10:00

select * from 客户表 

where 1=1 

${if(len(S_ID)==0,""," and 客户ID>='"+S_ID+"'")}

${if(len(D_ID)==0,""," and 客户ID<='"+D_ID+"'")}



数据集换成这样的

  • 8关注人数
  • 1409浏览人数
  • 最后回答于:2019-1-21 10:00
    请选择关闭问题的原因
    确定 取消
    返回顶部