SQL Server - 选择括号()之间的整数

时间:2010-07-16 08:31:18

标签: sql sql-server substring reverse

HI,如何从单元格右侧开始选择一对()之间的整数?原因是,可能有另一对包含字符的括号

如果由于某种原因某些记录没有关闭括号怎么办?

e.g. 
Period | ProgrammeName             |  
Jan    | ABC (Children) (30)       |
Feb    | Helloworld (20T (20)      |

结果: 三十 20

我有这个脚本,

选择Period,ProgrammeName, substring(ProgrammeName,(len(ProgrammeName) - (patindex('%(%',Reverse(ProgrammeName)))+ 2),(len(ProgrammeName)-1)) 来自表

但它只显示 30) 20)

我一直在操纵它,以便它不会提取')',但可以得到预期的 结果

3 个答案:

答案 0 :(得分:4)

如果要准备数据以进行标准化,请快速而脏;

select substring(fld, patindex('%([0-9]%)', fld) + 1, len(fld) - case patindex('%([0-9]%)', fld) when 0 then 0 else patindex('%([0-9]%)', fld) + 1 end)

答案 1 :(得分:3)

您的数据库需要规范化。

无论(30)和(20)代表什么,都应该在他们自己的专栏中。

答案 2 :(得分:2)

希望这是一项迁移任务。您可以使用RegEx尝试它:

http://blogs.msdn.com/b/sqlclr/archive/2005/06/29/regex.aspx

编辑:或此博客文章

http://justgeeks.blogspot.com/2008/08/adding-regular-expressions-regex-to-sql.html