【问题标题】:SQL Count digits in a stringSQL 计算字符串中的数字
【发布时间】:2017-09-23 02:20:07
【问题描述】:

我有一个包含以下信息的表格。

description: adjkfa34kj34kj33j4k3jk4
description: adfkjjkdf34_3434kjkjkj3
description: akjdfkjadfkjadkjfkjadfj
description: 34394394093040930949039

如何编辑下面的 SQL 查询来计算字符串中的位数(即 [0-9])?

select description as num_count
from posts;

【问题讨论】:

    标签: sql postgresql rails-postgresql


    【解决方案1】:

    一种方法是去掉所有其他字符:

    select length(regexp_replace(description, '[^0-9]', '', 'g'))
    

    【讨论】:

    • 我相信上面的代码在代码末尾缺少一个结束“)”。当我尝试它时,我收到错误:“函数 len(text) 不存在”。
    • 我得到了它:length(regexp_replace(ticker, '[^0-9]', '', 'g'))
    【解决方案2】:

    试试这个,

     CREATE FUNCTION dbo.udf_GetNumeric
        (
            @strAlphaNumeric VARCHAR(256)
        )
        RETURNS VARCHAR(MAX)
        AS
        BEGIN
            DECLARE @intAlpha INT
            SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric)
    
            BEGIN
                WHILE @intAlpha > 0
                BEGIN
                        SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' )
                        SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric )
                END
            END
    
            RETURN @strAlphaNumeric
        END
        GO
    
    /*For Example,*/
    SELECT LEN(dbo.udf_GetNumeric('') )
    SELECT LEN(dbo.udf_GetNumeric('asdf1234a1s2d3f4@@@') )
    SELECT LEN(dbo.udf_GetNumeric('123ghdfhdhh456'))
    SELECT LEN(dbo.udf_GetNumeric(NULL) )
    

    SELECT LEN(dbo.udf_GetNumeric(description)) AS num_count 来自帖子;

    【讨论】:

    • 这似乎是很多代码。你对长度有什么看法(regexp_replace(ticker, '[^0-9]', '', 'g'))
    • 这看起来像 sql server 语法,而不是 postgresql
    • 'regexp_replace' 不是可识别的内置函数名称。我收到了这个错误。在 sql server 2012 中使用 regexp_replace 时
    【解决方案3】:

    我使用了以下内容:

    SELECT CARDINALITY(REGEXP_EXTRACT_ALL('a123', '\d')) -- returns 3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      • 2019-09-14
      • 2016-10-28
      • 2018-04-20
      • 1970-01-01
      相关资源
      最近更新 更多