【问题标题】:SQL string manipulation [Get all text left of '(']SQL 字符串操作 [获取 '(' 左侧的所有文本]
【发布时间】:2019-01-18 12:31:20
【问题描述】:

我有一些看起来像这样的数据:

SourceOfBooking
----------------
Company1 (Foo)
Company2 (Bar)
Company3 (Foo1)
Company4 (Foo2)

我正在寻找转换它,所以我的数据只显示:

SourceOfBooking
----------------
Company1
Company2
Company3
Company4

我试过了:

LEFT(SourceOfBooking, CHARINDEX(';', SourceOfBooking) )

没有运气。

我确定我错过了一些非常简单的东西......有人愿意开导吗?

KR,詹姆斯。

【问题讨论】:

  • “非常简单”:是的。就像使用错误的搜索字符一样简单;-)
  • 记得在(之前加一个空格。

标签: sql sql-server tsql


【解决方案1】:

我认为你只是输入了一个错误的字符

case
    when CHARINDEX('(', SourceOfBooking) > 0 then
        rtrim(left(SourceOfBooking, CHARINDEX('(', SourceOfBooking) - 1))
    else
        SourceOfBooking
end

【讨论】:

  • Msg 537, Level 16, State 2, Line 2 传递给 LEFT 或 SUBSTRING 函数的长度参数无效。
  • 感谢您的出色工作,但您在代码中遗漏了一个“THEN”,它不允许我对其进行编辑以包含...
  • 接受您的回答。感谢您的帮助,神奇的互联网向导。
【解决方案2】:

你可以;

LEFT(SourceOfBooking, CHARINDEX(' (', SourceOfBooking + ' (') - 1)

(如果需要,删除 + ' (';它允许没有  ( 的行

【讨论】:

    【解决方案3】:

    这将返回公司名称,无论是否有括号,并且还将处理括号前没有空格的情况:

    select case 
        when CHARINDEX('(', SourceOfBooking) > 0
        then RTRIM(LEFT(SourceOfBooking, CHARINDEX('(', SourceOfBooking) - 1))
        else SourceOfBooking
    end
    from Table1
    

    SQL Fiddle Example

    【讨论】:

      【解决方案4】:

      你可以试试这个。

      创建一个新表并按照以下脚本插入数据。然后执行选择查询。您将获得所需的输出。

      create table teststring
      (name varchar(20))
      
      insert  into teststring values ('ashish (123)')
      insert  into teststring values ('ashish jain (123)')
      
      
      select substring(name,1,charindex('(',name)-1)abc ,name from teststring
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-04
        • 1970-01-01
        • 1970-01-01
        • 2019-06-11
        • 2018-07-18
        • 2016-09-25
        • 1970-01-01
        相关资源
        最近更新 更多