【问题标题】:Removing everything after the first backslash在第一个反斜杠之后删除所有内容
【发布时间】:2018-03-11 13:48:52
【问题描述】:

如果我有一个字符串,例如:

one\two\three\four\five\six\
two\three\four\five\six\one\
three\four\five\six\one\two\
four
five\six

我如何修剪它,所以我只剩下

one
two
three
four
five

我试过了

LEFT(column_name_goes_here, CHARINDEX('\', column_name_goes_here) - 1)

根据SQL Server replace, remove all after certain character的回答

但它给了我以下错误信息:

Msg 537, Level 16, State 3, Procedure stored_procedure_one, Line 107
Invalid length parameter passed to the LEFT or SUBSTRING function.

【问题讨论】:

  • 您的 CHARINDEX 正在寻找正斜杠,而您的数据有反斜杠。
  • CHARINDEX('\', column_name_goes_here) - 1)
  • @SeanLange,抱歉,这是一个错字,在实际脚本中,它是一个反斜杠。我已经更正了问题中的文字。
  • @ChetanVasudevan,对不起,这是一个错字,在实际脚本中,它是一个反斜杠。我已经更正了问题中的文字。
  • @SeanLange 是正确的。使用您的示例,您的代码可以正常工作。 然而,如果你有一个没有反斜杠的字符串,它会返回这个错误。它将返回 0 的 CHARINDEX,当您减去 1 时,您将 -1 传递给您的 LEFT 函数。

标签: sql sql-server tsql sql-server-2012


【解决方案1】:

为避免此类错误,请添加故障保护。注意+ '\'

示例

LEFT(column_name_goes_here, CHARINDEX('\', column_name_goes_here + '\') - 1)

【讨论】:

  • 这是一个比丑陋的CASE 更巧妙的答案我刚刚写到一半......我觉得很愚蠢:)
  • 工作,完美,非常感谢您的快速响应!
  • @oshirowanen 很高兴它有帮助
  • 以防万一,记得考虑空值:LEFT(column_name_goes_here, CHARINDEX('\', isnull(column_name_goes_here,'') + '\') - 1)
  • @Gamic 如果值为null,则返回null且不会出错
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多