【问题标题】:SQL Query - Select numbers where last 7 digits are identicalSQL 查询 - 选择最后 7 位数字相同的数字
【发布时间】:2013-11-25 20:22:59
【问题描述】:

我在 SQL 中有一个表,里面有 13 位数字组成的数字。

我想编写一个查询,选择所有 数字,其中 最后 7 位数字 相同

例如:

其中:

2547041010012
2547042003000
2547041111111
2547042011100
2547040000000

选择这些:

2547040000000
2547041111111

如何编写此查询? 我使用 SUBSTRING(mo,7,7) 吗?

其中 SUBSTRING(mo,7,7) = ??

任何帮助将不胜感激

【问题讨论】:

  • 它们有何相同之处?你的意思是最后7位数字应该是同一个数字?
  • 是的,所有以相同的最后 7 位数字结尾的数字 @christiandev

标签: sql-server select substring


【解决方案1】:
WHERE LEN (REPLACE(RIGHT(mo,7), RIGHT(mo,1), '') ) = 0

WHERE RIGHT(mo,7) NOT LIKE '%[^' + RIGHT(mo,1) + ']%'

WHERE mo LIKE '%' + REPLICATE (RIGHT(mo,1), 7)

我更喜欢第三种解决方案。

【讨论】:

  • 第一个应该是 = 0?
  • @OGHaza 数字“4”之后的所有内容都应该相同。最后 7 位数字。
  • 是的,我知道,这两种解决方案都可以正常工作,但我认为第一个应该是 = 0 而不是 = 1(否则当最后 7 个字符中的 6 个字符相同时它匹配)
  • @HelpASisterOut 在第二个中,我检查最后 7 个符号是否不包含除最后一个符号之外的任何内容。
  • @HelpASisterOut 为什么不持续 7 点?我不把百分号放在like 语句的末尾。例如,如果 mo'2547041111111',那么 where 子句将类似于 WHERE mo LIKE '%1111111',它表示我们需要以七个 1 结尾的 mo
【解决方案2】:
select column_with_number
from table_with_column
where right(column_with_number,7) in (
    '0000000',
    '1111111',
    '2222222',
    '3333333',
    '4444444',
    '5555555',
    '6666666',
    '7777777',
    '8888888',
    '9999999'
)

【讨论】:

    【解决方案3】:

    你也可以定义你的数字列表,然后加入它......(但@GriGrim solution 更干净:)) - 我只添加了这个作为备用,以防这是一次性查询并且可能更快(取决于您的查询执行计划)。

    DECLARE @nums TABLE (num BIGINT)
    DECLARE @allowednums TABLE (num BIGINT)
    INSERT INTO @nums
            ( num ) VALUES ( 2547041010012 )
            INSERT INTO @nums
            ( num ) VALUES ( 2547042003000 )
            INSERT INTO @nums
            ( num ) VALUES ( 2547041111111 )
            INSERT INTO @nums
            ( num ) VALUES ( 2547042011100 )
            INSERT INTO @nums
            ( num ) VALUES ( 2547040000000 )
    
    INSERT INTO @allowednums
            ( num ) VALUES ( 0000000 )
            INSERT INTO @allowednums
            ( num ) VALUES ( 1111111 )
            INSERT INTO @allowednums
            ( num ) VALUES ( 2222222 )
            INSERT INTO @allowednums
            ( num ) VALUES ( 3333333 )
            INSERT INTO @allowednums
            ( num ) VALUES ( 4444444 )
            INSERT INTO @allowednums
            ( num ) VALUES ( 5555555 )
            INSERT INTO @allowednums
            ( num ) VALUES ( 6666666 )
            INSERT INTO @allowednums
            ( num ) VALUES ( 7777777 )
            INSERT INTO @allowednums
            ( num ) VALUES ( 8888888 )
            INSERT INTO @allowednums
            ( num ) VALUES ( 9999999 )
    
    SELECT  [@nums].num
    FROM    @nums
            INNER JOIN @allowednums ON CAST(right(CAST([@nums].num AS VARCHAR(20)), 7) AS INT) = [@allowednums].num
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      相关资源
      最近更新 更多