我们有一些输入数据有时会出现在最后的字符中.
数据作为varchar()从源系统进入,我们尝试转换为十进制失败b/c这些字符.
Ltrim和Rtrim不会删除字符,因此我们不得不这样做:
UPDATE myTable
SET myColumn = replace(myColumn,char(160),'')
WHERE charindex(char(160),myColumn) > 0
Run Code Online (Sandbox Code Playgroud)
这适用于 ,但对于任何非字母数字(或在本例中为数字)字符,是否有一种好方法可以执行此操作?
小智 17
这将删除所有非字母数字字符
CREATE FUNCTION [dbo].[fnRemoveBadCharacter]
(
@BadString nvarchar(20)
)
RETURNS nvarchar(20)
AS
BEGIN
DECLARE @nPos INTEGER
SELECT @nPos = PATINDEX('%[^a-zA-Z0-9_]%', @BadString)
WHILE @nPos > 0
BEGIN
SELECT @BadString = STUFF(@BadString, @nPos, 1, '')
SELECT @nPos = PATINDEX('%[^a-zA-Z0-9_]%', @BadString)
END
RETURN @BadString
END
Run Code Online (Sandbox Code Playgroud)
使用如下功能:
UPDATE TableToUpdate
SET ColumnToUpdate = dbo.fnRemoveBadCharacter(ColumnToUpdate)
WHERE whatever
Run Code Online (Sandbox Code Playgroud)
此页面提供了如何删除非字母数字字符的示例:
-- Put something like this into a user function:
DECLARE @cString VARCHAR(32)
DECLARE @nPos INTEGER
SELECT @cString = '90$%45623 *6%}~:@'
SELECT @nPos = PATINDEX('%[^0-9]%', @cString)
WHILE @nPos > 0
BEGIN
SELECT @cString = STUFF(@cString, @nPos, 1, '')
SELECT @nPos = PATINDEX('%[^0-9]%', @cString)
END
SELECT @cString
Run Code Online (Sandbox Code Playgroud)