需要使用的语句如下:
SELECT * FROM table1 WHERE int_MyID in (SELECT txt_MyText FROM table2 WHERE int_MyID=1);我做过的试验:
1、
SELECT txt_MyText FROM table2 WHERE int_MyID=1 
这个语句查询出来的结果会是 1,2 (txt_MyText字段类型是varchar)
但int_MyID字段类型是int2、
如果执行
SELECT * FROM table1 WHERE int_MyID in (1,2)
则可以显示两条记录3、
但执行
SELECT * FROM table1 WHERE int_MyID in ('1,2')
就只显示一条记录了可根据第一个表达式查询出来的结果确实就是如上所示,一个varchar型值我的问题:如何将varchar型 '1,2' 做成int型的列表 1,2

解决方案 »

  1.   

    select
        a.* 
    from 
        table1 a,
        table2 b 
    where 
        charindex(','+rtrim(a.int_MyID)+',' , ','+b.txt_MyText+',')>0 
        and 
        b.int_MyID=1
      

  2.   

    SELECT * FROM 
    table1 
    WHERE cast(int_MyID as varchar(10)) in (SELECT txt_MyText FROM table2 WHERE int_MyID=1)
      

  3.   

    --1.动态SQL
    exec('SELECT * FROM table1 WHERE int_MyID in ('+ '1,2' +')')--2.换一种方式
    SELECT * FROM table1 WHERE Charindex(','+int_MyID+',',  ',1,2,')>0
      

  4.   


    SELECT txt_MyText=(case when ISNUMERIC(txt_MyText) =1 then cast(txt_MyText as int) else -1 end) FROM table2 WHERE int_MyID=1
      

  5.   


    --理解錯了
    exec('SELECT * FROM table1 WHERE int_MyID in ('+SELECT txt_MyText FROM table2 WHERE int_MyID=1+')')
      

  6.   

    declare @s varchar(5000)
    declare @x varchar(5000)
    SELECT @x=txt_MyText FROM table2 where int_MyID=1
    set @s='SELECT * FROM table1 WHERE int_MyID in ('+@x+')'
    exec(@s)
      

  7.   

    SELECT a.* 
      FROM table1  a inner join txt_MyText b
       on charindex(','+cast(a.int_MyID as varchar)+',',','+b.txt_MyText+',')>0
         where    b.int_MyID=1
      

  8.   

    用convert吧SELECT * FROM table1 WHERE int_MyID in (SELECT convert(int, txt_MyText) FROM table2 WHERE int_MyID=1);
      

  9.   

    总结并结贴:1、我试过SQLServer使用各位(除Convert)的方法可行2、目前我用了MYSQL,使用中根据各位的思想进行了改装,按如下方法进行也可行
        select cast(Concat('(',REPLACE((SELECT txt_GList from sys_g where int_GID in (select txt_GList FROM sys_u where int_UID = in_uid)) , ',','),('),')') as char(512)) into @tmp_gl;    select * from sys_m where FIND_IN_SET(concat('(',int_MID,')'), @tmp_gl);3、大家可以看到,分成两名是可以的,但合并到一句中就不成。select * from sys_m where FIND_IN_SET(concat('(',int_MID,')'), cast(Concat('(',REPLACE((SELECT txt_GList from sys_g where int_GID in (select txt_GList FROM sys_u where int_UID = in_uid)) , ',','),('),')') as char(512)));不知道有不有熟悉MYSQL的给解释一下。