SQL函数问题

标签 sql tsql logic

无法为这个问题提出搜索参数,所以我无法自己找到答案。

      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

像往常一样,我会在等待提示的同时尝试寻找答案。谢谢!

最佳答案

查看内置函数 charindexpatindexsubstring

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/

相关文章:

sql - 寻找简单的应收账款数据库设计

c++ - Qt:数据库连接不会打开

sql - Oracle SQL -WITH 子句列名的数量与选择列表中的元素数量不匹配

sql - 跨多个可能的 ID 匹配记录

sql-server - 将两个查询组合在一起形成月份计数

javascript - 第一次单击时函数无法正确触发

php - 根据表数据有条件地执行SQ​​L查询/语句

sql-server - 在一列上选择 Distinct 并消除 Select Distinct 中的空值?

javascript - 有人可以帮我一些逻辑吗?

java - 如何创建 Battleship 战舰游戏算法