【问题标题】:SQL Select statement until a characterSQL Select 语句直到一个字符
【发布时间】:2017-05-10 08:50:19
【问题描述】:

我希望提取所有文本,直到 '\'(反斜杠)。

需要子字符串来删除所有进行中的字符(总共 17 个),所以我想在 17 号之后全部返回,直到遇到反斜杠。

我尝试过使用 charindex,但它似乎并没有停止在 \ 之后它返回字符。我的代码如下

SELECT path, substring(path,17, CHARINDEX('\',Path)+ LEN(Path)) As Data
  FROM [Table].[dbo].[Projects]
  WHERE Path like '\ENQ%\' AND 
  Deleted = '0'

例子

下面的屏幕截图显示了基本查询和结果,即整个字符串

然后我使用子字符串删除前 X 个字符,因为总会有相同数量的继续字符

但我真正追求的是(基于上述结果)“测试 1”“测试 2”和“测试 ABC”部分

【问题讨论】:

  • 向我们展示所有案例的一些输入数据,以及每个案例的预期输出。
  • 对不起,我不明白 - 我没有输入表格。您的意思是使用 insert 插入示例数据然后查询该数据吗?

标签: sql-server tsql


【解决方案1】:

子字符串需要删除所有进行中的字符(总共 17 个),所以我想在 17 号之后全部返回,直到遇到反斜杠。

select 
substring(path,17,CHARINDEX('\',Path)-17)
from
table

要克服Invalid length parameter passed to the LEFT or SUBSTRING function 错误,可以使用 CASE

 select 
    substring(path,17,
   CASE when  CHARINDEX('\',Path,17)>0
        Then  CHARINDEX('\',Path)-17)
        else VA end
           )
    from
    table

【讨论】:

  • 谢谢,如果我使用您的示例,我会收到传递给 LEFT 或 SUBSTRING 函数的无效长度参数。
  • 可能是length字段取负值,可能有一些字段可能没有``,所以减17的时候,值变成负数了,能否加样例数据跨度>
猜你喜欢
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 2021-01-05
  • 2010-09-08
  • 2014-06-13
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多