SQL Server 2008 R2:查找比给定数字长的单元格
SQL Server 2008 R2: Finding cells longer than given number
我有以下 table 和一些记录。
TABLE:
CREATE TABLE TblPatterns
(
ColPattern VARCHAR(20)
);
INSERT INTO TblPatterns VALUES('123A4567890'),
('123B4567890'),
('123A4567891'),
('123A4567892'),
('243C4567890'),
('123A4567890'),
('123'),
('243'),
('123'),
('24'),
('1');
我需要将查询编写为与给定模式完全匹配。
给定的模式就像 1 到 10 或 11。我需要做的是,必须检查确切的
从 LEFT 匹配字符。
示例 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
您必须使用以下逻辑来获取匹配特定长度的模式。
DECLARE @pat INT = 1
SELECT * from TblPatterns WHERE LEN(colPattern) >= @pat;
我有以下 table 和一些记录。
TABLE:
CREATE TABLE TblPatterns
(
ColPattern VARCHAR(20)
);
INSERT INTO TblPatterns VALUES('123A4567890'),
('123B4567890'),
('123A4567891'),
('123A4567892'),
('243C4567890'),
('123A4567890'),
('123'),
('243'),
('123'),
('24'),
('1');
我需要将查询编写为与给定模式完全匹配。
给定的模式就像 1 到 10 或 11。我需要做的是,必须检查确切的 从 LEFT 匹配字符。
示例 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
您必须使用以下逻辑来获取匹配特定长度的模式。
DECLARE @pat INT = 1
SELECT * from TblPatterns WHERE LEN(colPattern) >= @pat;