使用查询检索数据时从 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 中删除特定字符的主要内容,如果未能解决你的问题,请参考以下文章