我有下表和一些记录。
表格:
CREATE TABLE TblPatterns
(
ColPattern VARCHAR(20)
);
INSERT INTO TblPatterns VALUES('123A4567890'),
('123B4567890'),
('123A4567891'),
('123A4567892'),
('243C4567890'),
('123A4567890'),
('123'),
('243'),
('123'),
('24'),
('1');
我需要将查询编写为给定模式的完全匹配。
给定的模式类似于1到10或11.我需要做的是,必须检查确切 来自左派的角色匹配。
示例1:
DECLARE @Pat int = 10
预期产出:
ColPattern
---------------
123A4567890
123A4567891
123A4567892
示例2:
DECLARE @Pat int = 3
预期产出:
ColPattern
---------------
123A4567890
123B4567890
123A4567891
123A4567892
123
243C4567890
243
示例3:
DECLARE @Pat int = 1
预期产出:
ColPattern
---------------
123A4567890
123B4567890
123A4567891
123A4567892
243C4567890
123
243
24
1
我的尝试:1
DECLARE @Pat int = 10
SELECT DISTINCT ColPattern
FROM TblPatterns
WHERE substring(ColPattern,1,@Pat) IN
(
SELECT substring(ColPattern,1,@Pat)
FROM TblPatterns
GROUP BY substring(ColPattern,1,@Pat)
HAVING COUNT(*) > 1
);
但得到意想不到的结果:
ColPattern
------------
123
123A4567890
123A4567891
123A4567892
答案 0 :(得分:2)
您必须使用以下逻辑来获得与特定长度匹配的模式。
DECLARE @pat INT = 1
SELECT * from TblPatterns WHERE LEN(colPattern) >= @pat;