【问题标题】:SQL Server: replace by NULLSQL Server:替换为 NULL
【发布时间】:2022-01-24 08:26:30
【问题描述】:
SELECT REPLACE('hello', 'e', NULL) 
-- returns NULL

SELECT REPLACE('hello', '5', NULL) 
-- also returns NULL -- here I'd expect it does nothing since there is no '5' in 'hello'

documentation 明确指出:

如果任一参数为 NULL,则返回 NULL。

所以行为被解释了。

是否有解决方法,这意味着如果在 hello 中的 'e' 之类的字符串中找到模式;发出 NULL 值?

【问题讨论】:

  • 如果模式在hellonot,那么输出应该是什么?
  • 旁注:SQL Server 2008 已完全不支持超过 2 年;你真的应该看看升级路径。
  • @Tim Biegeleisen ;如果没有找到,它应该返回 hello。如果找到,它应该返回 NULL。

标签: sql sql-server sql-server-2008


【解决方案1】:

似乎REPLACE 不是你想要的。一种方法是使用CASELIKE

SELECT CASE WHEN 'hello' NOT LIKE '%5%' THEN 'hello' END;

您也可以使用CHARINDEX:

SELECT CASE WHEN CHARINDEX('5','hello') = 0 THEN 'hello' END;

【讨论】:

  • 谢谢!有时您从一个问题开始而忘记了替代方案... :-) 非常感谢!!!
  • 不客气,@TimBer。如果它回答了问题,请考虑将其标记为解决方案,以便将来的用户知道答案是有帮助的。谢谢。
  • 我刚试过;但是在某种情况下,您不能强制结果为 NULL :(
  • 你是什么意思,@TimBer?如果找到搜索字符,以上两个都将返回NULLdb<>fiddle
猜你喜欢
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 2015-09-10
  • 1970-01-01
  • 2013-08-03
  • 1970-01-01
相关资源
最近更新 更多