在我的项目中,有时会发生用户在名称列中输入非英文字符。我想在我的数据库中搜索非英文字符的多个表并删除它们或用''
替换(空字符串)。
我已经通过以下链接但仍然回答不清楚:
寻找将执行此任务的SQL脚本。目前我正在使用替换方法,如:
update TBLDAILYROUTINE a set a.NAME = replace(a.NAME,'é','')
答案 0 :(得分:2)
正如其他人评论的那样,最好在数据进入数据库之前进行验证和替换。
为了清理现有数据,最简单的方法可能是use a SQL CLR UDF,可以在需要清理的列上运行。
快速而脏的C#代码段,用于清除所有非ASCII字符(副作用'?'也被删除):
public static string StripNonAsciiContent(string source)
{
Encoding utf8 = new UTF8Encoding();
Encoding ascii = Encoding.ASCII;
byte[] input = utf8.GetBytes(source);
byte[] output = Encoding.Convert(utf8, ascii, input);
return ascii.GetString(output).Replace("?", "");
}
更好的方法是编写一个正则表达式来替换允许范围之外的所有字符:
public static string StripNotAllowedCharacters(string source)
{
return Regex.Replace(source, @"[^a-zA-Z-]", "");
}
答案 1 :(得分:0)
如何使用功能? 创建功能:
CREATE FUNCTION dbo.sf_ReplaceChars (@MyString NVARCHAR(MAX))
RETURNS NVARCHAR(50)
AS
BEGIN
DECLARE @tmpString NVARCHAR(100)
SET @tmpString = @MyString
SET @tmpString = LOWER(@tmpString)
SET @tmpString = REPLACE(@tmpString,'à', 'a')
SET @tmpString = REPLACE(@tmpString,'è', 'e')
SET @tmpString = REPLACE(@tmpString,'é', 'e')
SET @tmpString = REPLACE(@tmpString,'ì', 'i')
SET @tmpString = REPLACE(@tmpString,'ò', 'o')
SET @tmpString = REPLACE(@tmpString,'ù', 'u')
SET @tmpString = REPLACE(@tmpString,'ç', 'c')
RETURN @tmpString
END
GO
然后在需要时使用它,假设用户输入存储在变量@userInput:
中INSERT INTO myTable (text) VALUES select dbo.sf_ReplaceChars(@userInput)
您可以为该功能添加更多REPLACE以满足您的所有需求。
此致 托马斯
答案 2 :(得分:0)
运行以下查询:
declare @table varchar(50)
declare @column varchar(50)
declare @updateCommand varchar(50)
DECLARE AllMyColumns CURSOR FOR
SELECT top 1 OBJECT_NAME(c.OBJECT_ID) TableName, c.name ColumnName
FROM sys.columns AS c
JOIN sys.types AS t ON c.user_type_id=t.user_type_id
WHERE t.name = 'varchar' --select your datatype
ORDER BY c.OBJECT_ID
OPEN AllMyColumns
FETCH NEXT FROM AllMyColumns into @table, @column;
WHILE @@FETCH_STATUS = 0 BEGIN
set @updateCommand = 'update '+ @table + ' set '+ @column + ' = replace('+ @column +',''é'','''')'
exec(@updateCommand)
FETCH NEXT FROM AllMyColumns into @table, @column;
end
close AllMyColumns
DEALLOCATE AllMyColumns
我使用您建议的更新命令编辑