起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1245|回复: 5

[结贴] 怎么在where子句实现如下case ... ... end

[复制链接]

242

主题

1418

帖子

2325

积分

金牌会员

批判主义者

Rank: 6Rank: 6

积分
2325
QQ
发表于 2014-6-26 09:03:35 | 显示全部楼层 |阅读模式
版本: 小版本号:
数据库: 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:
比如说在where字符要实现 fCategory in ('frdw','fzjg','bm') 【这个是静态实现】 我要动态

我的实现是:定义了连个字符串常量

String fOrgKindCodeInStr = "'('||''''||'frdw'||''''||','||''''||'fzjg'||''''||','||''''||'bm'||''''||')'";
String fOrgKindCodeNotDeptInStr = "'('||''''||'frdw'||''''||','||''''||'fzj'||''''||')'";

然后在SQL中where字句拼接了如下一段:

"where fcategory in (case when '" + tjbm + "' = 0 then '" +  fOrgKindCodeNotDeptInStr  + "' else '" +  fOrgKindCodeInStr  + "' end)"

SQL该部分输入如下【如果没有该条件没有问题】:

fcategory in (case when '1 = 1' then ''('||''''||'frdw'||''''||','||''''||'fzj'||''''||')'' else ''('||''''||'frdw'||''''||','||''''||'fzjg'||''''||','||''''||'bm'||''''||')'' end)

结果报错


如果我说对了 请别忘记点赞.

17

主题

355

帖子

772

积分

高级会员

Rank: 4

积分
772
QQ
发表于 2014-6-26 09:10:25 | 显示全部楼层
你在sql里case判断放在这个位置是不对的。
你这样的操作最好由存储过程来实现,那样更灵活。

评分

参与人数 1 +3 收起 理由
jishuang + 3 赞一个!

查看全部评分

一步一步走向那迦南地......
回复 支持 反对

使用道具 举报

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
发表于 2014-6-26 10:14:58 | 显示全部楼层
where里面不能写case when
in的写法可以改造成instr
例如
select ER_WPXX.*
    from ER_WPXX ER_WPXX
where instr(',11,33,',concat(',',ER_WPXX.fWPMC,','))
相当于
where ER_WPXX.fWPMC in ('11','33')

远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

242

主题

1418

帖子

2325

积分

金牌会员

批判主义者

Rank: 6Rank: 6

积分
2325
QQ
 楼主| 发表于 2014-6-26 10:16:10 | 显示全部楼层
zhaixin 发表于 2014-6-26 10:14
where里面不能写case when
in的写法可以改造成instr
例如

谢谢
如果我说对了 请别忘记点赞.
回复 支持 反对

使用道具 举报

242

主题

1418

帖子

2325

积分

金牌会员

批判主义者

Rank: 6Rank: 6

积分
2325
QQ
 楼主| 发表于 2014-6-26 14:47:42 | 显示全部楼层
本帖最后由 腹部流出的肉 于 2014-6-26 15:09 编辑
zhaixin 发表于 2014-6-26 10:14
where里面不能写case when
in的写法可以改造成instr
例如


select 'zhaixin' "求看看" from dual where 1 = (case when 1 = 1 then 1 else 0 end);

在Oracle的where字句可以使用case end  你的那个concat参数错了 必须两个
如果我说对了 请别忘记点赞.
回复 支持 反对

使用道具 举报

242

主题

1418

帖子

2325

积分

金牌会员

批判主义者

Rank: 6Rank: 6

积分
2325
QQ
 楼主| 发表于 2014-6-26 14:48:11 | 显示全部楼层
zhaixin 发表于 2014-6-26 10:14
where里面不能写case when
in的写法可以改造成instr
例如

你的那个还是不太行 求看看why
如果我说对了 请别忘记点赞.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-16 03:19 , Processed in 0.065124 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表