我试图从一个列中提取数据,该列包含ID和括号中包含ID的字符,它看起来有点像这样(顺便说一句,如果它们碰巧存在于一行中,那么只有一组括号):
| 第1列|
| - ------|
| 马克(1234)|
| 小行星6789|
| VZ(X678)|
| ASD(5677)奎|
| 理想结果|
| - ------|
| 1234|
| 小行星6789|
| 小行星678|
| 小行星5677|
这是我到目前为止所拥有的,但它返回了一个错误:'传递给LEFT或SUBSTRING函数的长度参数无效。'
SELECT DISTINCT col1,
CASE WHEN col1 like '%(%' then
SUBSTRING (col1,
CHARINDEX('%(%', col1) + 1,
CHARINDEX('%)%', col1) - CHARINDEX('%(%', col1) - 1)
else col1 end
from MyTable B;
2条答案
按热度按时间rdlzhqv91#
如果您对支持多个观察的帮助表值函数感兴趣,如果您不需要该函数,将逻辑迁移到
CROSS APPLY
中也是小事一桩e0uiprwp2#
@martin Smith谢谢你指出通配符的用法。我把我的代码修改成这样,它做了我需要它做的事情!使用case when表达式来查找括号,而不管位置如何,所以我保留了%通配符,但在CHARINDEX中去掉了它,正如你提到的: