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      ,''        
goselect 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
*/

解决方案 »

  1.   


    select ID,GYLX from table_1
    where RIGHT(GYLX,1)='0' or RIGHT(GYLX,1)='7'
      

  2.   


    select *      
    from [table_1]
    WHERE SUBSTRING([gylx],LEN(gylx),1) IN ('0','7')
      

  3.   


    -- GYLX列中最后一个包含数字0的
    select top 1 * 
     from table_1
     where charindex('0',GYLX,1)>0
     order by ID desc-- GYLX列中最后一个包含数字7的
    select top 1 * 
     from table_1
     where charindex('7',GYLX,1)>0
     order by ID desc
      

  4.   


    select * from table_1  where GYLX like '%0' or GYLX like '%7'
    楼主试试这个吧。
      

  5.   

    select gylx from table_1 where gylx like '%[07]' 楼主看看可行?
      

  6.   

    可能是我没说明白:如果我的数据库里有这么两条记录:
    ID    GYLX
    6     0G-11DX
    7     3J-0G
    我只想得到的结果是:就是GYLX里面有很多数字,我只想要最后一个数字是0的那条记录:
    7     3J-0G
    而不是:
    6     0G-11DX
      

  7.   

    是啊,困扰我很久了,大神给我写一个看看?
    可能是我没说明白:如果我的数据库里有这么两条记录:
    ID    GYLX
    6     0G-11DX
    7     3J-0G
    我只想得到的结果是:就是GYLX里面有很多数字,我只想要最后一个数字是0的那条记录:
    7     3J-0G
    而不是:
    6     0G-11DX
      

  8.   

    可能是我没说明白:如果我的数据库里有这么两条记录:
    ID    GYLX
    6     0G-11DX
    7     3J-0G
    我只想得到的结果是:就是GYLX里面有很多数字,我只想要最后一个数字是0的那条记录:
    7     3J-0G
    而不是:
    6     0G-11DX
      

  9.   

    可能是我没说明白:如果我的数据库里有这么两条记录:
    ID    GYLX
    6     0G-11DX
    7     3J-0G
    我只想得到的结果是:就是GYLX里面有很多数字,我只想要最后一个数字是0的那条记录:
    7     3J-0G
    而不是:
    6     0G-11DX是这样吗:
    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      ,''   union all
    select 6     ,'0G-11DX' union all
    select 7     ,'3J-0G'    
    go
    select ID,GYLX
    from 
    (
    select *,
           ROW_NUMBER() over(order by id desc) rownum
    from table_1
    where GYLX like '%0%' --or GYLX like '%7%'
    )t
    where rownum = 1
    /*
    ID GYLX
    7 3J-0G
    */
      

  10.   


    可能是我没说明白:如果我的数据库里有这么两条记录:
    ID    GYLX
    6     0G-11DX
    7     3J-0G
    我只想得到的结果是:就是GYLX里面有很多数字,我只想要最后一个数字是0的那条记录:
    7     3J-0G
    而不是:
    6     0G-11DX
      

  11.   

    可能是我没说明白:如果我的数据库里有这么两条记录:
    ID    GYLX
    6     0G-11DX
    7     3J-0G
    我只想得到的结果是:就是GYLX里面有很多数字,我只想要最后一个数字是0的那条记录:
    7     3J-0G
    而不是:
    6     0G-11DX
      

  12.   

    可能是我没说明白:如果我的数据库里有这么两条记录:
    ID    GYLX
    6     0G-11DX
    7     3J-0G
    我只想得到的结果是:就是GYLX里面有很多数字,我只想要最后一个数字是0的那条记录:
    7     3J-0G
    而不是:
    6     0G-11DX是这样吗:
    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      ,''   union all
    select 6     ,'0G-11DX' union all
    select 7     ,'3J-0G'    
    go
    select ID,GYLX
    from 
    (
    select *,
           ROW_NUMBER() over(order by id desc) rownum
    from table_1
    where GYLX like '%0%' --or GYLX like '%7%'
    )t
    where rownum = 1
    /*
    ID GYLX
    7 3J-0G
    */
    还有一种情况刚才忘说了:
    比如 :
    8  3J-0G
    9  3J-0G-4ZB
    我只想要:
    8  3J-0G
    不要
    9  3J-0G-4ZB
      

  13.   

    可能是我没说明白:如果我的数据库里有这么两条记录:
    ID    GYLX
    6     0G-11DX
    7     3J-0G
    我只想得到的结果是:就是GYLX里面有很多数字,我只想要最后一个数字是0的那条记录:
    7     3J-0G
    而不是:
    6     0G-11DX是这样吗:
    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      ,''   union all
    select 6     ,'0G-11DX' union all
    select 7     ,'3J-0G'    
    go
    select ID,GYLX
    from 
    (
    select *,
           ROW_NUMBER() over(order by id desc) rownum
    from table_1
    where GYLX like '%0%' --or GYLX like '%7%'
    )t
    where rownum = 1
    /*
    ID GYLX
    7 3J-0G
    */
    还有一种情况刚才忘说了:
    比如 :
    8  3J-0G
    9  3J-0G-4ZB
    我只想要:
    8  3J-0G
    不要
    9  3J-0G-4ZB这个有什么判断规则不
      

  14.   

    先创建函数--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))
    --    if @sql_two=0
    --       begin
    --           select @mysql_two= substring (@mysql_one,@sql_one,len(@mysql_one)+1-@sql_one)
    --       end
    --    else
    --       begin
    --           select @mysql_two=substring (@mysql_one,@sql_one,@sql_two-1)
    --       end
    --    return @mysql_two;
    --end----------------------------------------------------------------
    -- Author  :DBA_Huangzj(發糞塗牆)
    -- Date    :2013-12-23 11:13:23
    -- Version:
    --      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
    -- Dec 28 2012 20:23:12 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
    --
    ----------------------------------------------------------------
    --> 测试数据:[table_1]
    if object_id('[table_1]') is not null drop table [table_1]
    go 
    create table [table_1]([ID] int,[GYLX] varchar(9))
    insert [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,null
    --------------开始查询--------------------------select * 
    from [table_1]
    WHERE [dbo].[m_getnumberV2.0](REVERSE([GYLX])) IN (0,7)
    ----------------结果----------------------------
    /* 
    ID          GYLX
    ----------- ---------
    2           4b-3j-7zp
    4           0g*/
      

  15.   

    可能是我没说明白:如果我的数据库里有这么两条记录:
    ID    GYLX
    6     0G-11DX
    7     3J-0G
    我只想得到的结果是:就是GYLX里面有很多数字,我只想要最后一个数字是0的那条记录:
    7     3J-0G
    而不是:
    6     0G-11DX是这样吗:
    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      ,''   union all
    select 6     ,'0G-11DX' union all
    select 7     ,'3J-0G'    
    go
    select ID,GYLX
    from 
    (
    select *,
           ROW_NUMBER() over(order by id desc) rownum
    from table_1
    where GYLX like '%0%' --or GYLX like '%7%'
    )t
    where rownum = 1
    /*
    ID GYLX
    7 3J-0G
    */
    还有一种情况刚才忘说了:
    比如 :
    8  3J-0G
    9  3J-0G-4ZB
    我只想要:
    8  3J-0G
    不要
    9  3J-0G-4ZB这个有什么判断规则不
    没什么判断规则,这个GYLX比较乱 什么情况都可能发生
    但是都是由数字和字符组成我需要判断的是 字符串中最后一个数字是0或者别的数字(这个数字是可以随便输入的)
      

  16.   

    可能是我没说明白:如果我的数据库里有这么两条记录:
    ID    GYLX
    6     0G-11DX
    7     3J-0G
    我只想得到的结果是:就是GYLX里面有很多数字,我只想要最后一个数字是0的那条记录:
    7     3J-0G
    而不是:
    6     0G-11DX是这样吗:
    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      ,''   union all
    select 6     ,'0G-11DX' union all
    select 7     ,'3J-0G'    
    go
    select ID,GYLX
    from 
    (
    select *,
           ROW_NUMBER() over(order by id desc) rownum
    from table_1
    where GYLX like '%0%' --or GYLX like '%7%'
    )t
    where rownum = 1
    /*
    ID GYLX
    7 3J-0G
    */
    还有一种情况刚才忘说了:
    比如 :
    8  3J-0G
    9  3J-0G-4ZB
    我只想要:
    8  3J-0G
    不要
    9  3J-0G-4ZB这个有什么判断规则不
    没什么判断规则,这个GYLX比较乱 什么情况都可能发生
    但是都是由数字和字符组成我需要判断的是 字符串中最后一个数字是0或者别的数字(这个数字是可以随便输入的)看看我18楼的行不行
      

  17.   

    可能是我没说明白:如果我的数据库里有这么两条记录:
    ID    GYLX
    6     0G-11DX
    7     3J-0G
    我只想得到的结果是:就是GYLX里面有很多数字,我只想要最后一个数字是0的那条记录:
    7     3J-0G
    而不是:
    6     0G-11DX是这样吗:
    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      ,''   union all
    select 6     ,'0G-11DX' union all
    select 7     ,'3J-0G'    
    go
    select ID,GYLX
    from 
    (
    select *,
           ROW_NUMBER() over(order by id desc) rownum
    from table_1
    where GYLX like '%0%' --or GYLX like '%7%'
    )t
    where rownum = 1
    /*
    ID GYLX
    7 3J-0G
    */
    还有一种情况刚才忘说了:
    比如 :
    8  3J-0G
    9  3J-0G-4ZB
    我只想要:
    8  3J-0G
    不要
    9  3J-0G-4ZB这个有什么判断规则不
    没什么判断规则,这个GYLX比较乱 什么情况都可能发生
    但是都是由数字和字符组成我需要判断的是 字符串中最后一个数字是0或者别的数字(这个数字是可以随便输入的)
    这样吗:
    --drop table table_1create 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      ,''   union all
    select 6     ,'0G-11DX' union all
    select 7     ,'3J-0G' union all
    select 8  ,'3J-0G' union all
    select 9  ,'3J-0G-4ZB' 
    go
    select ID,GYLX
    from 
    (
    select *,
           ROW_NUMBER() over(order by charindex('0',reverse(GYLX)) ,id desc) rownum
    from table_1
    where GYLX like '%0%' --or GYLX like '%7%'
    )t
    where rownum = 1
    /*
    ID GYLX
    8 3J-0G
    */
      

  18.   


    create table #temp(ID  int,    GYLX varchar(100))
     
    insert into #temp
    SELECT 8,'3J-0G' UNION ALL 
    SELECT 9,'3J-0G-4ZB';WITH a1 AS
    (
    SELECT id,REVERSE(gylx) gylx FROM #temp
    )
    ,a2 AS
    (
    SELECT *,CASE WHEN CHARINDEX('-',gylx)>0 THEN LEFT(gylx,CHARINDEX('-',gylx)-1) ELSE gylx END gylx2
    FROM a1
    )
    SELECT * FROM #temp WHERE id =
    (
    SELECT MAX(id)
    FROM a2
    WHERE CHARINDEX('0',gylx2)>0 OR CHARINDEX('7',gylx2)>0
    )
      

  19.   


    create table pard(ID int,GYLX varchar(20))insert into pard
     select 6,'0G-11DX' union all
     select 7,'3J-0G' union all
     select 8,'3J-0G' union all
     select 9,'3J-0G-4ZB'
     -- GYLX列中最后一个包含数字0的
    select * 
     from pard 
     where substring(reverse(GYLX),
                     patindex('%[0-9]%',reverse(GYLX)),
                     1)='0'/*
    ID          GYLX
    ----------- --------------------
    7           3J-0G
    8           3J-0G(2 row(s) affected)
    */
    -- GYLX列中最后一个包含数字4的
    select * 
     from pard 
     where substring(reverse(GYLX),
                     patindex('%[0-9]%',reverse(GYLX)),
                     1)='4'/*
    ID          GYLX
    ----------- --------------------
    9           3J-0G-4ZB(1 row(s) affected)
    */