读书人

一个简单SQL语句相信你能行解决思路

发布时间: 2012-02-12 17:16:34 作者: rapoo

一个简单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

读书人网 >SQL Server

热点推荐