【问题标题】:How to count task like completion from one column如何从一列计算任务完成
【发布时间】:2021-07-15 16:33:12
【问题描述】:

我有一列包含

"*********任务列表完成*******
1.测试
2.测试
3.
4.
5.

如何创建 SQL 查询来计算完成情况?即当“数字”之后有文字时。 > 1.测试

上面会返回 count = 2

我试过了:

SELECT id as Task    
      ,table    
      ,table.id    
  from table             
 where table.id like '%Tier 1 Please Insure all tasks%'       
   and table.id LIKE '%3._%'        

【问题讨论】:

    标签: sql string tsql count


    【解决方案1】:

    我是这样解决的:

    SELECT COUNT(*)
    FROM (
        SELECT Column FROM table WHERE Column LIKE '[0-9]%._%'
    ) AS a
    

    在哪里我检查了该列:

    • 必须以数字开头
    • 包含一个点
    • 点后至少有一个字符

    DB FIDDLE这里检查测试输出


    更新

    因为您在开始时没有提供完整的问题,所以我更新了答案:

    在运行查询之前,我创建了一个包含测试数据的表

    CREATE TABLE tbl (field NVARCHAR(200))
    INSERT INTO tbl VALUES ('Test DGS ********** Tier 1 Please Insure all tasks are fully completed ********* 1.test 2.test 3. 4. 5. 6. ')
    
    CREATE TABLE #pom (Word NVARCHAR(50))
    

    我写了主查询:

    DECLARE @Strings NVARCHAR(200) = (SELECT REVERSE(LEFT(REVERSE(field), charindex('*', REVERSE(field)) - 2)) FROM tbl)
    
    WHILE LEN(@Strings) > 0
    BEGIN
        INSERT INTO #pom
        SELECT LEFT(@Strings, CHARINDEX(' ', @Strings) -1) AS 'Word'
    
        SET @Strings = stuff(@Strings, 1, charindex(' ', @Strings + ' '), '')
    END
    
    SELECT COUNT(*)
    FROM (
        SELECT Word FROM #pom WHERE Word LIKE '[0-9]%._%'
    ) AS a
    

    你可以在这里看到输出:

    您可以使用此代码或您需要的任何内容创建函数或存储过程。

    【讨论】:

    • @DarrenStrong 你检查过 db fiddle 链接吗?请写下有关您的评论的更多详细信息。
    • 感谢您对这个问题的帮助,我已经对此进行了测试,不幸的是没有得到计数。您能否@marko-ivkovic 看看下面的内容并提供帮助?这是列结果 - 所有这些文本都在一个字段内 = 测试 DGS ********** 第 1 层请确保所有任务都已完全完成 ********* 1.test 2.test 3. 4. 5. 6. SQL 查询帮助澄清 = SELECT Column FROM table WHERE table.Column like '%Tier 1 Please Insure all tasks%'
    • 是的,这个 db fiddle 链接很有用。这显示了正在创建的数据并查找 11 行。这些数据都在一行中作为一个字符串。你能帮忙吗?
    • 然后将字符串拆分为更多字符串并实现我的查询逻辑。修剪最后一个 * 字符之前的所有内容。您现在有了字符串 `1.test 2.test 3. 4. 5. 6.`,我建议使用分隔符之类的空格,然后正常继续。
    • 抱歉不知道怎么实现,请给我看看好吗?会有很大帮助
    【解决方案2】:

    你可以试试这个:

    SELECT count(*)
    FROM table
    WHERE table.id LIKE '[1-9]%[a-z]'
    

    【讨论】:

    • 感谢您对这个问题的帮助,我已经对此进行了测试,不幸的是没有得到计数。您能否@alexander-chef 看看下面的内容并提供帮助?这是列结果 = 测试 DGS ********** 第 1 层请确保所有任务都已完全完成 ********* 1.test 2.test 3. 4. 5. 6.
    • 嗨 Darren,您可以从 dbfiddle 链接查看。 dbfiddle.uk/…。也许问题出在您的 SQL 平台上。您使用的是哪个 SQL? Mysql、MSSQL 还是哪一个?
    • 嗨@alexander-chef,这个 dbfiddle 显示正在创建的数据并查找 5 行。这些数据都在一行中作为一个字符串。另一个问题是我没有对数据库的写入权限,因此无法使用 SQL SP 等。你能帮忙吗?
    【解决方案3】:

    如果数据始终采用这种格式,您可以使用如下通配符表达式。

    SELECT count(*)
    FROM [table]
    WHERE [column] LIKE '[1-9]%[a-z]' 
    

    【讨论】:

    • 感谢您对这个问题的帮助,我已经对此进行了测试,不幸的是没有得到计数。您能否@WAMLeslie 看看下面的内容并提供帮助?这是列结果 = 测试 DGS ********** 第 1 层请确保所有任务都已完全完成 ********* 1.test 2.test 3. 4. 5. 6.
    • @DarrenStrong 我已经更新了上面的查询以包含COUNT()。您需要更改我的 [table][column] 以对应于您的实际表名和列名。
    • 感谢您对这个问题的帮助,我已经对此进行了测试,不幸的是没有得到计数。您能否@marko-ivkovic 看看下面的内容并提供帮助?这是列结果 - 所有这些文本都在一个字段内 = 测试 DGS ********** 第 1 层请确保所有任务都已完全完成 ********* 1.test 2.test 3. 4. 5. 6. SQL 查询帮助澄清 = SELECT Column FROM table WHERE table.Column like '%Tier 1 Please Insure all tasks%' 此数据都在一行内作为字符串。你能帮忙吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多