日期:2014-05-19  浏览次数:20443 次

一个简单SQL语句,相信你能行
需要使用的语句如下:
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字段类型是int

2、
如果执行
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

------解决方案--------------------
select
a.*
from
table1 a,
table2 b
where
charindex( ', '+rtrim(a.int_MyID)+ ', ' , ', '+b.txt_MyText+ ', ')> 0
and
b.int_MyID=1
------解决方案--------------------
SELECT * FROM
table1
WHERE cast(int_MyID as varchar(10)) in (SELECT txt_MyText FROM table2 WHERE int_MyID=1)
------解决方案--------------------
--1.动态SQL
exec( 'SELECT * FROM table1 WHERE int_MyID in ( '+ '1,2 ' + ') ')

--2.换一种方式
SELECT * FROM table1 WHERE Charindex( ', '+int_MyID+ ', ', ',1,2, ')> 0
------解决方案--------------------

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