DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jeff1314
今日帖子: 21
在线用户: 12
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 iamcws (你健康我快乐) ★☆☆☆☆ -
普通会员
2017/3/23 15:28:22
标题:
如何写一个查询符合部分条件的SQL语句,请大家指教! 浏览:1415
加入我的收藏
楼主: 一个表有一个自增字段(CmdID int identity(1,1)),当用户传给我一个字符串(如:"1,2,5,6,8,9,10,11,12,20"),也就是说,从表中要查询出CmdID=1或CmdID=2或CmdID=5或CmdID=6或CmdID=8或CmdID=9或CmdID=10或CmdID=11或CmdID=12或CmdID=20的记录,我知道这个SQL语句应该是这样写:select * from Command where CmdID in (1,2,3,5,6,8,9,10,11,12,20),但在SQL中如何把字符串"1,2,5,6,8,9,10,11,12,20"转成(1,2,3,5,6,8,9,10,11,12,20)?
上述问题,敬请各位老师指教!谢谢!
----------------------------------------------
不要等到孤独寂寞时才想起朋友,不要等到穷困潦倒时才想起发奋,不要等到疾病缠身时才想起健康。。。
作者:
男 beibeili (beibeili) ★☆☆☆☆ -
普通会员
2017/3/23 16:23:40
1楼: 你这个写法是要使用动态SQL呀!
对于SQLserver
'select * from Command where CmdID in('+cast(用户传入字符串 as varchar)+')'
对于Oracle
'select * from Command where CmdID in(' || 用户传入字符串 || ')'
对于MySQL
concat( 'select * from Command where CmdID in(', 用户传入字符串. ')' )
然后执行这个SQL即可

但是动态SQL效率比较低,而且你的in值比较多,如果返回数据很多的话效率是极低的!
如果可能的话使用表连接可能效率会高一些,不过这种方法需要一个临时表X,将用户传入的数据拆分后每个CmdID一行存入,然后使用
select * from Command a, X where a.comid = x.comid
如果有索引会更快
以上三种数据库都支持临时表,不过要注意SQLServer要创建全局临时表

希望以上解答对你有帮助
----------------------------------------------
-
作者:
男 hnljs (竹寨) ★☆☆☆☆ -
盒子活跃会员
2017/3/23 18:26:10
2楼: 把字符 ~1~2~3~     条件   WHERE  POS(COMID,~1~2~3~....)>1
----------------------------------------------
-
作者:
男 zhahongyi (如风) ★☆☆☆☆ -
普通会员
2017/3/24 13:57:15
3楼: sql2008 

SELECT  bh
FROM    ( SELECT    Name = CONVERT(XML, '<root><v>'
          + REPLACE('1,2,5,6,8,9,10,11,12,20', ',', '</v><v>')
          + '</v></root>')
        ) a
        OUTER APPLY ( SELECT    bh = C.v.value('.', 'nvarchar(100)')
          FROM      a.Name.nodes('/root/v') C ( v )
          ) b
----------------------------------------------
-
作者:
男 iamcws (你健康我快乐) ★☆☆☆☆ -
普通会员
2017/3/24 19:23:14
4楼: 已经解决,谢谢各位老师的指教!
SQL语句如下:
exec('select CmdID,CmdName,CmdKind,Sequences,CmdData,CmdCommMedia,CmdCommWay,ResultJudge,ResultGist,CmdDelay,Remark from Cmd698 where CmdID in (' + @p_CmdIDList + ')')
----------------------------------------------
不要等到孤独寂寞时才想起朋友,不要等到穷困潦倒时才想起发奋,不要等到疾病缠身时才想起健康。。。
作者:
男 happyboyjia (天使之翼) ★☆☆☆☆ -
盒子活跃会员
2017/5/4 15:37:23
5楼: 你这个只能是数字哇。文本呢
----------------------------------------------
DELPHI学习者
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行39.0625毫秒 RSS