SQL Server:通过迭代城市名称表从字段数据中删除子字符串

时间:2013-09-30 16:49:08

标签: sql sql-server database iteration

我有两个数据库,数据库A和数据库B.

数据库A包含一些需要放在数据库B的表中的数据。但是,在此之前,必须通过以下方式“清理”部分数据:

数据库A中包含要放入数据库B的数据的表中有一个名为“Desc”的字段。系统的用户偶尔会将城市名称与他们输入的数据放入“Desc”字段中。例如:用户可以键入“将家具移动到新隔间”。纽约。加电。“

在将数据导入数据库B之前,需要从该数据中删除“纽约”一词,以便它只显示“将家具移动到新的隔间”。添加电气。“然而 - 这很重要 - 数据库A中的原始数据必须保持不变。换句话说,数据库A的数据仍然是“将家具搬到新的隔间”。纽约。添加电,“数据库B中的数据将读取”将家具移动到新的隔间。加电。“

数据库B包含一个表,其中列出了在放入数据库B之前需要从数据库A中的“描述”字段数据中删除的城市名称。

如何构建一个存储过程或函数,它将从数据库A中获取数据,然后遍历数据库B中的Cities表,如果它在“Desc”字段中找到城市名称将删除它,同时保留其余部分该字段中的信息因此创建了一个记录集,然后我可以使用它来填充数据库B中的相应表格?

我已经尝试过几件事,但仍然没有破解它。但我相信这可能相当容易。非常感谢任何帮助!

感谢。

编辑:

我试图解决这个问题的最新方法是:

DECLARE @cityName VarChar(50)

While (Select COUNT(*) From ABCScanSQL.dbo.tblDiscardCitiesList) > 0

Begin

Select @cityName = ABCScanSQL.dbo.tblDiscardCitiesList.CityName FROM ABCScanSQL.dbo.tblDiscardCitiesList

SELECT JOB_NO, LTRIM(RTRIM(SUBSTRING(JOB_NO, (LEN(job_no) -2), 5))) AS  LOCATION
      ,JOB_DESC, [Date_End] , REPLACE(Job_Desc,@cityName,' ') AS NoCity
       FROM fmcs_tables.dbo.Jobt WHERE Job_No like '%loc%'
End

“Job_Desc”是需要删除城市名称的字段。

1 个答案:

答案 0 :(得分:0)

这是一个数据质量问题。您始终可以复制数据库A中的[description]并将其命名为[cleaning_desc]。

一个简单的解决方案是编写一个执行以下操作的函数。

1 - 从[tbl_remove_these_words]读取数据。这些是您要删除的短语。

2 - 将输入 - @var_description与表中的行进行比较。

3 - 匹配时,用空字符串替换。

此解决方案取决于您维护和更新的清理表。

运行更新查询,使用[description]的输入调用[fn_remove_these_words]并将[cleaning_desc]设置为输出。

另一个解决方案是查看用于SSIS的Melisa Data(DQ)产品或SQL服务器堆栈中的数据质量服务等产品,为您提供解决问题的应用程序框架。