34,838
社区成员




--求一SQL
CREATE TABLE #TMP
(
COLUMN1 VARCHAR(20)
)
INSERT INTO #TMP SELECT 'A1'
INSERT INTO #TMP SELECT 'A10'
INSERT INTO #TMP SELECT 'A22'
INSERT INTO #TMP SELECT 'B5'
INSERT INTO #TMP SELECT 'B6'
INSERT INTO #TMP SELECT 'B55'
INSERT INTO #TMP SELECT '01'
INSERT INTO #TMP SELECT '05'
INSERT INTO #TMP SELECT '15'
--DROP TABLE #TMP
SELECT * FROM #TMP
-----查询选择有 A,B,0 ----
--选择 A 查询COLUMN1 中以A 开头的数据
--选择 B 查询COLUMN1 中以B 开头的数据
--选择 0 查询COLUMN1 中以0 开头的数据
--比如 选择A 查询 1~10 之间的数据,那么就只能查出 A1 ,A10 其他的同样道理
CREATE TABLE #TMP
(
COLUMN1 VARCHAR(20)
)
INSERT INTO #TMP SELECT 'A1'
INSERT INTO #TMP SELECT 'A10'
INSERT INTO #TMP SELECT 'A22'
INSERT INTO #TMP SELECT 'B5'
INSERT INTO #TMP SELECT 'B6'
INSERT INTO #TMP SELECT 'B55'
INSERT INTO #TMP SELECT '01'
INSERT INTO #TMP SELECT '05'
INSERT INTO #TMP SELECT '15'
declare @param varchar(10)
set @param='A'
SELECT * FROM #TMP where left(COLUMN1,1)=@param
and replace(COLUMN1,@param,'')+0 between 1 and 10
/*
COLUMN1
--------------------
A1
A10
*/
drop table #TMP
CREATE TABLE #TMP
(
COLUMN1 VARCHAR(20)
)
INSERT INTO #TMP SELECT 'A1'
INSERT INTO #TMP SELECT 'A10'
INSERT INTO #TMP SELECT 'A22'
INSERT INTO #TMP SELECT 'B5'
INSERT INTO #TMP SELECT 'B6'
INSERT INTO #TMP SELECT 'B55'
INSERT INTO #TMP SELECT '1'
INSERT INTO #TMP SELECT '5'
INSERT INTO #TMP SELECT '15'
select * from #TMP
where ISNUMERIC(COLUMN1)=1
and cast(COLUMN1 as int) between 1 and 10
/*
COLUMN1
--------------------
1
5
(2 行受影响)
*/
CREATE PROCEDURE P_#TMP
@i varchar (10),--查询A B 0
@k int, --取值上限
@l int --取值下限
AS
EXEC('select * from #TMP
where left(COLUMN1,1)='''+@i+'''
and cast(replace(COLUMN1,'''+@i+''','''') as int) between '+@k+' and '+@l+'')
--调用
EXEC P_#TMP 'A',1,10
select * from tb where left(COLUMN1,1)='A'
and cast(right(COLUMN1,len(COLUMN1)-1) as int) between 1 and 10
select * from #TMP
where left(COLUMN1,1)='A'
and cast(replace(COLUMN1,'A','') as int) between 1 and 10
/*
COLUMN1
--------------------
A1
A10
(所影响的行数为 2 行)
*/
select * from tb where left(COLUMN1,1)='A'
and cast(right(COLUMN1,len(COLUMN1)-1) as int) between 1 and 10