使用查询检索数据时从 varchar 中删除特定字符

Posted

技术标签:

【中文标题】使用查询检索数据时从 varchar 中删除特定字符【英文标题】:Remove a particular character from varchar while retrieving data using query 【发布时间】:2009-09-17 06:08:03 【问题描述】:

我想在从表中检索 varchar 时删除特定字符。查询如下所示:

SELECT ServiceName,
       case isNumeric(Ramusage) 
         when 1 then 
           cast ( ltrim ( rtrim ( ramusage )) as int )
         else 
           0 
       end as test,
       priority
  FROM ProcessInfo

这里的问题是ramusage 是一个varchar,它存储的值如 12,500K、4,321K。

这里我想从条目中删除“K”并单独显示数字。

【问题讨论】:

【参考方案1】:

您想使用 REPLACE 功能:

REPLACE(ramusage, 'k', '')

参考:

SQL Server Oracle mysql

【讨论】:

【参考方案2】:

使用替换

DECLARE @ProcessInfo TABLE(
        ServiceName VARCHAR(MAX),
        Ramusage VARCHAR(MAX),
        priority INT
)

INSERT INTO @ProcessInfo (ServiceName,Ramusage,priority)
SELECT 'TEST','12,123K',1

SELECT ServiceName,
       case isNumeric(REPLACE(REPLACE(Ramusage,'K',''),',','')) 
         when 1 then 
           cast ( ltrim ( rtrim ( REPLACE(REPLACE(Ramusage,'K',''),',',''))) as int )
         else 
           0 
       end as test,
       priority
  FROM @ProcessInfo

我们所做的是创建一个 CLR 函数来获取字符串并删除所有非数字项

[Microsoft.SqlServer.Server.SqlFunction]
    public static SqlString RemoveNonNumeric(SqlString strValue)
    
        string strNew = strValue.ToString();

        char[] chrArray = strNew.ToCharArray();

        strNew = null;

        for (int iChar = 0; iChar < chrArray.Length; iChar++)
        
            if (Char.IsNumber(chrArray[iChar]))
                strNew += chrArray[iChar];
        

        // Put your code here
        return new SqlString(strNew);
    

【讨论】:

如果处理 SQL Server 2005+,我会在 CTE 中进行 REPLACE 操作。 我们已经尝试了很多想法,我们的一个事务表有一个外部事务引用,并且测试了超过 4 百万条记录,我们发现 clr 函数是最快的.. (也是 sql server 2005)【参考方案3】:
substr( ltrim( rtrim( ramusage ) ), length( ramusage ) - 1)

编辑: replace,如其他答案中所述,可能更好。

【讨论】:

以上是关于使用查询检索数据时从 varchar 中删除特定字符的主要内容,如果未能解决你的问题,请参考以下文章

MySQL ----- 排序检索

单击元素时从 mongodb 中删除特定的数组元素

如何用多次出现的模式填充 varchar

Android Room Database,检索输入的最新记录的特定值

每次oncreateView片段时从活动中检索数据

识别并检索Oracle数据库中所有varchar列的值