无法为这个问题提出搜索参数,所以我无法自己找到答案。
Column X | Message (info 1) | Message (info 2) (info 1) |
以上是我需要处理的一栏内容。查询的结果应该只是括号内的部分。问题是,有一个程序将两组信息保存在括号中,在这种情况下,LATTER (info 1) 是我们想要在第一列中显示的信息,除此之外我们还必须添加第二个信息 2 的列。
所以我想我需要将一个 if 子句与一个我可以依赖的变量结合起来,例如,我可以计算有多少个左括号。 如果 left_parentheses = 2,则 ....否则如果 left_parentheses = 1,则 ....
但我不知道如何在 SQL 中执行此操作,而且我也不知道如何在示例中区分 info 1/2。
示例的结果如下所示:
Column 1 | Column 2 Info 1 | Info 1 | Info 2
像往常一样,我会在等待提示的同时尝试寻找答案。谢谢!
最佳答案
查看内置函数 charindex
、patindex
和 substring
。
charindex
查找指定字符的位置,patindex
模式,substring
按位置返回字符串的一部分。
我的建议是在 X 所在的表列上编写一个 View ,它使用上述函数提供两个计算列。然后您可以insert into result table select info1, info2 from columnX'stable;
。
至少计算列 info2
将包含一个 case 语句来处理源中只有一个带括号的“信息”的情况,大致如下:
case when [some test using patindex too check for two parenthesized infos]
then [some combination of patidex and substring to extract the second info]
else null;
特别是,当未找到模式时 patindex 返回零:
patindex('%(%)%(%)%', columnX)
将为您的第一个示例返回零,但不会为您的第二个示例返回零。
您还需要考虑如何处理错误数据,特别是 1) 没有括号的行,2) 左右括号数量不等的行,3) 两个带括号的“信息”之间的附加文本,4 ) 和右括号后的附加文本。
我鼓励您将所有这些可能性的示例以及格式正确的 columnXes 添加到您的测试数据中,然后测试该 View 是否在所有情况下都符合您的要求。
关于SQL函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/784804/