Sql 将varchar子字符串中的ID值转换为it';s查找值

Sql 将varchar子字符串中的ID值转换为it';s查找值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个varchar类型的SQL列,用于包含SQL条件,例如(下面的3行): 我需要创建一个查询,以获取可以发送给任何非技术人员的查询值。产出将是: WHERE Language = English OR Region = Canada WHERE Color= Red OR Region = Canada WHERE Status = Active OR Region = Canada AND Language = English 我知道我可以先将所有查找放在临时表中,然后使用REPLAC


我有一个varchar类型的SQL列,用于包含SQL条件,例如(下面的3行):

我需要创建一个查询,以获取可以发送给任何非技术人员的查询值。产出将是:

WHERE Language = English OR Region = Canada
WHERE Color= Red OR Region = Canada
WHERE Status = Active OR Region = Canada AND Language = English
我知道我可以先将所有查找放在临时表中,然后使用
REPLACE
函数,但我想知道是否有更好(更短)的方法来实现这一点?任何帮助都将受到感谢。

谢谢。

我将创建子查询列值,准备替换原始值,f.eks用于区域:

SELECT 
  CONCAT('%Region = ', Region,'%') ConditionToJoin,
  CONCAT('Region = ', Region) ConditionToFind, 
  CONCAT('Region = ', RegionName) ConditionToReplace
FROM Regions
使用LIKE运算符和CONDICTIONTOJOIN列将此子查询与条件行联接

如果您需要处理以下情况,还有一个问题:

  • 区域=1
  • 区域=1 等等
或者,您可以编写用户函数来清洗数据并执行所有替换,例如:

CREATE FUNCTION replaceLookups(@condition VARCHAR(MAX))
RETURNS VARCHAR(MAX)
BEGIN
  @string_replacement VARCHAR(MAX), @string_pattern VARCHAR(MAX);

  SET @string_pattern = SELECT TOP 1 CONCAT('Region = ', Region) FROM Regions WHERE @condition LIKE CONCAT('%Region = ', Region, '%')

  SET @string_replacement = SELECT TOP 1 CONCAT('Region = ', RegionName) FROM Regions WHERE @condition LIKE CONCAT('%Region = ', Region, '%')

  SET @ret = REPLACE(@condition, @string_pattern, @string_replacement)
  ... --and so on for each lookup
  RETURN @ret
END

警告的话。上面的代码是我从头开始写的-可能需要一些工作。而且我也不期望有好的表现

不清楚你想要什么。地区总是
加拿大
?您好,地区可以改变,这只是一个例子。这不是我想要的。我有一个包含行的列,每行都是硬编码的“WHERE”条件。我需要遍历每一行,删除ID并用值替换它,同时保持所有其他数据不变。
CREATE FUNCTION replaceLookups(@condition VARCHAR(MAX))
RETURNS VARCHAR(MAX)
BEGIN
  @string_replacement VARCHAR(MAX), @string_pattern VARCHAR(MAX);

  SET @string_pattern = SELECT TOP 1 CONCAT('Region = ', Region) FROM Regions WHERE @condition LIKE CONCAT('%Region = ', Region, '%')

  SET @string_replacement = SELECT TOP 1 CONCAT('Region = ', RegionName) FROM Regions WHERE @condition LIKE CONCAT('%Region = ', Region, '%')

  SET @ret = REPLACE(@condition, @string_pattern, @string_replacement)
  ... --and so on for each lookup
  RETURN @ret
END