【问题标题】:Issue with REPLACE in SQLSQL 中的 REPLACE 问题
【发布时间】:2019-03-14 10:49:05
【问题描述】:

我正在尝试使用替换替换 SQL 中字符串中的多个单词。

REPLACE(REPLACE(REPLACE(wholeString,'{{Name}}',w.Name),'{{ID}}',w.ID),'{{Sal}}',@salary) AS DETAILS

替换值是从另一个别名为 w 的表中读取的。

当我从 SSMS 执行 PROC 时,“详细信息”被插入到所需的表中。但是当我从代码中运行 proc 时,表格中会插入空白。

该代码仅传递了一个在 SP 端正确接收的 ID,因为我通过打印它进行了测试。

另外,是否有替代替代品?

【问题讨论】:

  • 您的查询应该没问题。您应该编辑您的问题并提供示例数据并显示查询如何工作。
  • 你是什么意思“有没有替代REPLACE”? REPLACE 执行一个非常简单的功能,它在字符串中找到 所有 个模式的出现,并用第三个参数替换 所有 这些模式。 REPLACE 将返回 NULL 的唯一时间是 3 个参数中的任何一个的值也是 NULL。如果REPLACE 没有找到替换它的模式,它仍然会返回原始值。 REPLACE('123','456','789') 返回'123'
  • 我的查询主要围绕我的问题的第二部分。尽管参数是正确传递的,并且尽管执行进入 if 循环并在两种情况下(从 ssms 运行时,从代码运行时)在新表中插入所需的行,但在调用 proc 时为“详细信息”输入空白来自代码,否则工作正常。
  • 如果您检查数据,您可能会发现问题。我遇到了一个类似的问题,我的数据中有一些空值,并用空值替换,使整个字符串为空,而不是用空白替换。我花了一段时间才找到我的。
  • @Matthew ,你在替换之前做了什么检查空值?

标签: sql .net sql-server


【解决方案1】:

注意:根据上面的评论检查空值。

SELECT  REPLACE(REPLACE(REPLACE(wholeString, '{{Name}}', ISNULL(w.Name,'')), '{{ID}}', ISNULL(w.ID,'')), '{{Sal}}', ISNULL(@salary,'')) AS DETAILS;

另请注意,您从中提取的这些列需要采用 char 格式。如果像 ID 或薪水参数这样的字段是数字的,你需要用这样的演员来包装它:

ISNULL(CAST(w.ID as NVARCHAR(255)),'')

【讨论】:

  • 谢谢你马修 :)
【解决方案2】:

如果你尝试这样做会发生什么?

REPLACE(REPLACE(REPLACE(ISNULL(wholeString, 'NULLWHOLESTRING'),'{{Name}}',ISNULL(w.Name, 'NULLNAME')),'{{ID}}',ISNULL(w.ID, 'NULLID')),'{{Sal}}',ISNULL(@salary, 'NULLSALARY')) AS DETAILS

这应该让您知道问题是否是由NULLs 引起的?

【讨论】:

  • 是的,Null 是问题所在。我检查了用空值替换其中一个值。返回空字符串。
猜你喜欢
  • 2010-12-07
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 2018-04-13
  • 2015-06-14
  • 1970-01-01
相关资源
最近更新 更多