我在 SQL 中有一个表,里面有 13 位数字组成的数字。
我想编写一个查询,选择最后7 位相同的所有数字。
例如 :
其中:
2547041010012
2547042003000
2547041111111
2547042011100
2547040000000
选择这些:
2547040000000
2547041111111
我该如何编写这个查询?我使用SUBSTRING(mo,7,7)吗?
其中 SUBSTRING(mo,7,7) = ??
任何帮助,将不胜感激
我在 SQL 中有一个表,里面有 13 位数字组成的数字。
我想编写一个查询,选择最后7 位相同的所有数字。
例如 :
其中:
2547041010012
2547042003000
2547041111111
2547042011100
2547040000000
选择这些:
2547040000000
2547041111111
我该如何编写这个查询?我使用SUBSTRING(mo,7,7)吗?
其中 SUBSTRING(mo,7,7) = ??
任何帮助,将不胜感激
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)
我更喜欢第三种解决方案。
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'
)
您还可以定义您的数字列表,然后加入反对...(但@GriGrimsolution更干净:)) - 我只是将其添加为备用,以防这是一次性查询并且可能更快(取决于您的查询执行计划)。
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