收集SQL Server中第一个分隔符之前的所有字符串



我需要在第一个管道形成SQL server表之前收集所有数据。

table ( input )
url
---------------------------
www.abcd.com | ww.asd.com
google.com | www.google.com
yahoo.com

what I want(输出)

url
------------
www.abcd.com
google.com
yahoo.com

我试过了:


 substring( url, 0 ,charindex('|' , url) )

上面的代码省略了所有没有管道的url。我怎样才能在输出中包含不省略没有管道的字符串的更改呢?

一种方法是用NULLIF包裹CHARINDEX,然后用ISNULL包裹整个表达式:

ISNULL(SUBSTRING(url, 0, NULLIF(CHARINDEX('|', url), 0)), url)

另一种方法是在末尾添加一个'|'字符,因此字符串中总是有一个:

SUBSTRING(url, 0, CHARINDEX('|', url+'|')
但是,理想情况下,您应该修复您的设计。首先,不要在数据库中存储分隔的数据。

最新更新