SQL Server 2008 R2:查找比给定数字长的单元格

Posted

技术标签:

【中文标题】SQL Server 2008 R2:查找比给定数字长的单元格【英文标题】:SQL Server 2008 R2: Finding cells longer than given number 【发布时间】:2018-05-30 03:37:07 【问题描述】:

我有一些记录的下表。

表格

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

【问题讨论】:

我无法从示例中理解。 pat = 1 如何匹配 243、24。 pat = 10 如何匹配 123A4567892 @VenkataramanR,正如我所说,它应该从 LEFT 开始匹配,在 pat =1 中找到 24324 的匹配项,因为 2 是左起第一个。 pat =1, LEFT 如何匹配所有这些模式。 123A4567890 123B4567890 123A4567891 123A4567892 243C4567890 123 243 24 1 @VenkataramanR,因为HAVING COUNT(*) > 1 如果你只删除123之一,问题就解决了。 【参考方案1】:

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

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

我也放了SQLFiddle reference

【讨论】:

以上是关于SQL Server 2008 R2:查找比给定数字长的单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何在SQL Server 2008R2中查找未使用的列

在 SQL Server 2008 R2 中为特定数据库用户设置最大查询数

SQL Server 2008 R2:查找 column2 值存在于 column1 中的行

SQL Server 2008 R2:查找两列之间的链接和链接

如何破解windows server 2008r2远程连接数2个的限制

SQL Server 2008 R2:计数字符匹配