首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如果用一个select搞定sql中字符串分隔
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • birdwings
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-11-18 22:44:39 楼主
      我Sql中有一个字段里面全是用,号分隔的,我现在要用第一个,号左边部份去比较,怎么写??
    比如,该字段(假设为B字段),值都为aaa,bb,ccc,dd这个样子..
    那么,select * from 表A where B = 'aaa'

    那个B部份应该怎么写???
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • CN_SQL
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 22:50:051楼 得分:0
    引用楼主 birdwings 的帖子:
      我Sql中有一个字段里面全是用,号分隔的,我现在要用第一个,号左边部份去比较,怎么写??
    比如,该字段(假设为B字段),值都为aaa,bb,ccc,dd这个样子..
    那么,select * from 表A where B = 'aaa'

    那个B部份应该怎么写???


    SQL code
    select * from 表A where substring(B,1,charindex(',',B)-1) = 'aaa'
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happyflystone
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

    发表于:2008-11-18 22:50:352楼 得分:0
    SQL code
    select * from 表A where charindex(',aaa,',','+B+',') > 0
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • CN_SQL
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 22:51:393楼 得分:0
    SQL code
    declare @t table ( col varchar(20) ) insert @t select 'aaa,bb,ccc,dd' union all select 'bbbb,aa,ccc,dd' select * from @t where substring(col,1,charindex(',',col)-1) = 'aaa' /** aaa,bb,ccc,dd **/
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happyflystone
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

    发表于:2008-11-18 22:54:114楼 得分:0
    SQL code
    declare @t table ( b varchar(20) ) insert @t select 'aaa,bb,ccc,dd' union all select 'bbbb,aa,ccc,dd' select * from @t where charindex(',aaa,',','+B+',') > 0 /* b -------------------- aaa,bb,ccc,dd (1 行受影响) */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • birdwings
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 22:55:445楼 得分:0
    谢谢楼上的老大们.其实还有一个问题这里,也帮忙解决一下吧.因为我这边SQL是写在代码里的,所以不好用存储过程.
    还是刚才那个字段.他除了有aa,bbb,cc这种类型的记录外,还有aaaaa这种类型的记录,就是说也有没有,号的记录.遇到没有,号的记录时就直接取过来去比较.
    那应该怎么修改呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 3

      3

    发表于:2008-11-18 22:56:456楼 得分:0
    引用楼主 birdwings 的帖子:
      我Sql中有一个字段里面全是用,号分隔的,我现在要用第一个,号左边部份去比较,怎么写??
    比如,该字段(假设为B字段),值都为aaa,bb,ccc,dd这个样子..
    那么,select * from 表A where B = 'aaa'

    那个B部份应该怎么写???


    SQL code
    select * from 表A where left(B,charindex(',',B)-1) = 'aaa'
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 3

      3

    发表于:2008-11-18 22:58:297楼 得分:0
    引用 5 楼 birdwings 的回复:
    谢谢楼上的老大们.其实还有一个问题这里,也帮忙解决一下吧.因为我这边SQL是写在代码里的,所以不好用存储过程.
    还是刚才那个字段.他除了有aa,bbb,cc这种类型的记录外,还有aaaaa这种类型的记录,就是说也有没有,号的记录.遇到没有,号的记录时就直接取过来去比较.
    那应该怎么修改呢?


    SQL code
    select * from 表A where (left(B,charindex(',',B)-1) = 'aaa' and charindex(',',B) > 0) or (B = 'aaa' and charindex(',',B) = 0)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • birdwings
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 22:58:588楼 得分:0
    补充下.='aaa'只是个举例,实际是我是
    select * from 表A where B not in (select C from 表D)
    这种样子的.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • birdwings
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 23:00:369楼 得分:0
    引用 7 楼 dawugui 的回复:
    引用 5 楼 birdwings 的回复:
    谢谢楼上的老大们.其实还有一个问题这里,也帮忙解决一下吧.因为我这边SQL是写在代码里的,所以不好用存储过程.
    还是刚才那个字段.他除了有aa,bbb,cc这种类型的记录外,还有aaaaa这种类型的记录,就是说也有没有,号的记录.遇到没有,号的记录时就直接取过来去比较.
    那应该怎么修改呢?



    SQL codeselect * from 表A where (left(B,charindex(',',B)-1) = 'aaa' and charindex(',',B) >…


    O..这楼的方法应该可以解决..不过我用两个 not in跑起来会不会效率很低受影响啊??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 3

      3

    发表于:2008-11-18 23:02:3410楼 得分:0
    引用 8 楼 birdwings 的回复:
    补充下.='aaa'只是个举例,实际是我是
    select * from 表A where B not in (select C from 表D)
    这种样子的.


    SQL code
    select * from 表A where (left(B,charindex(',',B)-1) not in (select C from 表D) and charindex(',',B) > 0) or (B not in (select C from 表D) and charindex(',',B) = 0)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 3

      3

    发表于:2008-11-18 23:04:3611楼 得分:0
    引用 9 楼 birdwings 的回复:
    O..这楼的方法应该可以解决..不过我用两个 not in跑起来会不会效率很低受影响啊??

    会.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happyflystone
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

    发表于:2008-11-18 23:07:4112楼 得分:0
    引用 8 楼 birdwings 的回复:
    补充下.='aaa'只是个举例,实际是我是
    select * from 表A where B not in (select C from 表D)
    这种样子的.



    直接内联两个表,在where 中加上你的条件
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • birdwings
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 23:11:4213楼 得分:0
    楼上的大哥能举个例么,我对join还太会用啊.什么内联外联的.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • CN_SQL
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 23:13:1714楼 得分:0
    SQL code
    declare @t1 table ( col varchar(20) ) insert @t1 select 'aaa,bb,ccc,dd' union all select 'bbbb,aa,ccc,dd' union all select 'aaaa' declare @t2 table ( col varchar(20) ) insert @t2 select 'aaa' union all select 'aaaa' select a.* from @t1 a join @t2 b on b.col = a.col or charindex(b.col+',',a.col) > 0 /** aaa,bb,ccc,dd aaaa **/
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • CN_SQL
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 23:13:3515楼 得分:0
    SQL code
    declare @t1 table ( col varchar(20) ) insert @t1 select 'aaa,bb,ccc,dd' union all select 'bbbb,aa,ccc,dd' union all select 'aaaa' declare @t2 table ( col varchar(20) ) insert @t2 select 'aaa' union all select 'aaaa' select a.* from @t1 a join @t2 b on b.col = a.col or charindex(b.col+',',a.col) > 0 /** aaa,bb,ccc,dd aaaa **/
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cxmcxm
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 23:15:5616楼 得分:0
    SQL code
    declcare @str varchar(100) set @str='aaa,bb,ccc,dd'; select left(@str,charindex(',',@str))

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • birdwings
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 23:20:1517楼 得分:0
    引用 15 楼 CN_SQL 的回复:
    SQL code
    declare @t1 table
    (
        col varchar(20)
    )

    insert @t1 select 'aaa,bb,ccc,dd'
    union all select 'bbbb,aa,ccc,dd'
    union all select 'aaaa'

    declare @t2 table
    (
        col varchar(20)
    )

    insert @t2 select 'aaa'
    union all select 'aaaa'


    select
        a.*
    from @t1 a
    join @t2 b
        on b.col = a.col
        or charindex(b.col+',',a.col) > 0

    /**
    aaa,bb,ccc,dd
    aaaa
    **/


    嗯.这个应该很到位了.我去测一下.一会儿就散分.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 3

      3

    发表于:2008-11-18 23:20:1718楼 得分:0
    引用 13 楼 birdwings 的回复:
    楼上的大哥能举个例么,我对join还太会用啊.什么内联外联的.

    如果是not in,内联做不了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happyflystone
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

    发表于:2008-11-18 23:27:5019楼 得分:0
    引用 15 楼 CN_SQL 的回复:
    SQL code
    declare @t1 table
    (
        col varchar(20)
    )

    insert @t1 select 'aaa,bb,ccc,dd'
    union all select 'bbbb,aa,ccc,dd'
    union all select 'aaaa'

    declare @t2 table
    (
        col varchar(20)
    )

    insert @t2 select 'aaa'
    union all select 'aaaa'


    select
        a.*
    from @t1 a
    join @t2 b
        on b.col = a.col
        or charindex(b.col+',',a.col) > 0

    /**
    aaa,bb,ccc,dd
    aaaa
    **/



    declare @t1 table
    (
        col varchar(20)
    )

    insert @t1 select 'aaa,bb,ccc,dd'
    union all select 'bbbb,aa,ccc,dd'
    union all select 'aaaa'

    declare @t2 table
    (
        col varchar(20)
    )

    insert @t2 select 'aaa'
    union all select 'aaaa'


    select
        a.*
    from @t1 a
    join @t2 b
        on  charindex(','+b.col+',',','+a.col+',') > 0

    /**
    aaa,bb,ccc,dd
    aaaa
    **/
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happyflystone
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

    发表于:2008-11-18 23:28:3320楼 得分:0
    引用 18 楼 dawugui 的回复:
    引用 13 楼 birdwings 的回复:
    楼上的大哥能举个例么,我对join还太会用啊.什么内联外联的.

    如果是not in,内联做不了.


    保留意见
    修改 删除 举报 引用