我有一张表:
如:
username:张大安
userinfo:党员|||未婚|||中国|||湖北|||武汉|||北京大学
username:李小伶
userinfo:团员|||未婚|||中国|||湖南|||长沙|||清华大学userinfo 是将用户的基本信息,组织成一个字符串存进一个字段
现在在前台,有个表单,从下拉菜单中找出所有该城市的用户如选择“北京”,提交,选出所有北京的用户现在是肯定知道城市在字符串中以“|||”分隔的第5个位置,但具体字符位置无法确定,因为省份有可能是3个字符,如黑龙江,国籍也可能是很长,如巴基斯坦
请问我这个sql语句应该怎么写?因为我有可能和别的表并列查询,如从user表中选出用户名,所在城市,从订单表中选出他的订单有人说这样写:
select username,substring(userinfo,22,4) 城市,orderid
from users s join orders o
on s.id=o.id
where substring(userinfo,22,4)='你的城市名称'这样肯定不行的,怎么能肯定就在22个字符的位置啊在线等,急!!!!

解决方案 »

  1.   

    如果你不嫌眼花缭乱的话,可以嵌套charindex函数,这样就可以得到城市名称在字符串里的起始位置.
    charindex('111',userinfo(charindex('|||',userinfo,(charindex('|||',userinfo,charindex('|||',userinfo)+1)+1)+1)+3
    (至于最后加的是3还是4,你自己试试吧)
    同理,你可以用同样的方法获得最后一个'|||'字符的位置,那么城市的名称自然就找到了
      

  2.   

    假如,city是传入的参数城市名,
    string city="深圳";
    string sql="select * from [user] where '|||'+userinfo+'|||' like '%|||' + '"+city+"' + '|||%'";
      

  3.   

    建议把userinfo分成:政治面貌,婚姻状态,国际,省份,市,毕业学校来分别存放,会方便很多,而且也是比较好的数据库设计.
      

  4.   

    所有我建义建类似这种表的时候应该这样子来,就是,AA,,BB,,CC,,DD,
      

  5.   

    在程序语言中 处理的了select username  from userT
    where userinfo like '%|||'+cityname+'|||%'
    这样也差不多了吧