我有一个SQL表,里面有13位数的数字。
我想编写一个查询,选择所有数字,最后7位数 相同。
例如:
其中:
2547041010012
2547042003000
2547041111111
2547042011100
2547040000000
选择以下内容:
2547040000000
2547041111111
如何编写此查询? 我是否使用 SUBSTRING(mo,7,7)?
其中SUBSTRING(mo,7,7)= ??
任何帮助将不胜感激
答案 0 :(得分:6)
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)
我更喜欢第三种解决方案。
答案 1 :(得分:0)
你也可以定义你的数字列表,然后加入... ...但是@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
答案 2 :(得分:0)
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'
)