SQL Server 2008 R2:查找超过给定数字的单元格

时间:2018-05-30 03:37:08

标签: sql sql-server tsql sql-server-2008-r2

我有下表和一些记录。

表格

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

1 个答案:

答案 0 :(得分:2)

您必须使用以下逻辑来获得与特定长度匹配的模式。

DECLARE @pat INT = 1
SELECT * from TblPatterns WHERE LEN(colPattern) >= @pat;

我还放了SQLFiddle reference