代码之家  ›  专栏  ›  技术社区  ›  Learner

SQL-从值与格式匹配的表中选择最高值?

  •  -1
  • Learner  · 技术社区  · 8 年前

    我有一个 variable 返回一个 format variable = '10100001001'

    我想从 column (char 20),其中值与上述变量的格式匹配。

    length

    我见过类似的问题来选择最大值,但不匹配的格式。

    Select value from Table1 where value like ('%variable%')

    我想知道有没有更明显和优雅的方式来实现这一点。

    id    value
    --  -- -- -- --
    1   101000019
    2   abcd123gh 
    3   101000026 
    4   abcd
    5    23433
    6   10100gh34
    

    预期结果:

    101000026
    

    1 回复  |  直到 8 年前
        1
  •  1
  •   markp-fuso    8 年前

    注意:不确定“匹配”是什么意思——可能是 length

    如果你所做的只是 like 模式匹配您只需添加 % select @variable = '%' + @variable + '%'

    这里有一个简单的例子。。。

    设置:

    create table Table1 (id int, value varchar(20))
    go
    
    insert Table1 values (1,'101000019')
    insert Table1 values (2,'abcd123gh')
    insert Table1 values (3,'101000026')
    insert Table1 values (4,'abcd')
    insert Table1 values (5,' 23433')
    insert Table1 values (6,'10100gh34')
    go
    
    select * from Table1
    go
    
     id          value
     ----------- --------------------
               1 101000019
               2 abcd123gh
               3 101000026
               4 abcd
               5  23433
               6 10100gh34
    

    declare @variable varchar(20)
    
    select  @variable = '10100001001'
    print "++++++++++++ pattern : %1!", @variable
    select max(value) from Table1 where value like '%' + @variable + '%'
    
    select  @variable = '101000'
    print "++++++++++++ pattern : %1!", @variable
    select max(value) from Table1 where value like '%' + @variable + '%'
    
    select  @variable = '10100'
    print "++++++++++++ pattern : %1!", @variable
    select max(value) from Table1 where value like '%' + @variable + '%'
    go
    
    ++++++++++++ pattern : 10100001001
     max(Table1.value)
     --------------------
     NULL
    
    ++++++++++++ pattern : 101000
     max(Table1.value)
     --------------------
     101000026
    
    ++++++++++++ pattern : 10100
     max(Table1.value)
     --------------------
     10100gh34