【问题标题】:Remove a particular character from varchar while retrieving data using query使用查询检索数据时从 varchar 中删除特定字符
【发布时间】: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”并单独显示数字。

【问题讨论】:

    标签: sql


    【解决方案1】:

    您想使用 REPLACE 功能:

    REPLACE(ramusage, 'k', '')
    

    参考:

    【讨论】:

      【解决方案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,如其他答案中所述,可能更好。

      【讨论】:

        猜你喜欢
        • 2012-10-13
        • 2022-12-17
        • 1970-01-01
        • 2016-10-25
        • 1970-01-01
        • 2013-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多