日期:2014-05-17  浏览次数:20569 次

求助,sql2005中一个困扰我很久的查询~
例如  表table_1:
ID     GYLX
1      3j-4b-5x
2      4b-3j-7zp
3      12zp
4      0g
5                
GYLX列中允许有空值

我的结果是将 GYLX列中最后一个包含数字0的查出来
或者最后一个包含数字7的结果查询出来

求大侠帮忙查询

------解决方案--------------------
create table table_1(ID  int,    GYLX varchar(100))

insert into table_1
select 1      ,'3j-4b-5x' union all
select 2      ,'4b-3j-7zp' union all
select 3      ,'12zp' union all
select 4      ,'0g' union all
select 5      ,''        
go

select ID,GYLX
from 
(
select *,
       ROW_NUMBER() over(partition by case when GYLX like '%0%' then 0
                                           when GYLX like '%7%' then 7
                                      end  order by id desc) rownum
from table_1
where GYLX like '%0%' or GYLX like '%7%'
)t
where rownum = 1
/*
ID GYLX
4 0g
2 4b-3j-7zp
*/

------解决方案--------------------
先创建函数
--create function [dbo].[m_getnumberV2.0]
--(
--       @mysql_one nvarchar(200)
--)
--returns varchar(200)
--begin
--    declare @mysql_two varchar(200)
--    declare @sql_one int
--    declare @sql_two int
--    select @sql_one= patindex('%[0-9.]%',@mysql_one)
--    select @sql_two=
--    patindex('%[^0-9.]%',
--    substring(@mysql_one,patindex('%[0-9.]%',@mysql_one),len(@mysql_one)-patindex('%[0-9.]%',@mysql_one)+1))
-- &nbs