【发布时间】:2011-07-08 07:40:03
【问题描述】:
我需要确定给定字符串的格式是否为“abcd efg -4”,即“% -number”。我需要隔离“4”,并将其增加到“5”。
字符串的其余部分可以包含日期和时间,如下所示:
abcd efg - ghis asdjh - 07-07-2011 05-30-34 AM
例如,此字符串不满足模式,即 -[number]。对于这个字符串,我的 SQL 的输出应该是
abcd efg - ghis asdjh - 07-07-2011 05-30-34 AM -1
如果输入以上内容,我应该得到:
abcd efg - ghis asdjh - 07-07-2011 05-30-34 AM -2
数字可以是任意位数,即字符串可以是“abcd efg -123”,而我的 T-SQL 将返回“abcd efg -124”
此 T-SQL 代码将嵌入到存储过程中。我知道我可以实现一个 .Net 存储过程/函数并使用正则表达式来执行此操作,但是为了打开 SQL Server 上的 CLR,我必须解决各种访问问题。
我尝试了以下模式:
- '%[ ][-]%[0-9]',这适用于大多数情况,但在某处放置一个额外的空间,它会失败
- '%[ ][-]%[^a-z][^A-Z]%[0-9]',这可以跳过'-4'(如上例所示),但在几种情况下有效,这样的
- '%[ ][-][^a-z][^A-Z]%[0-9]',这在某些情况下再次有效,在其他情况下无效...
这个模式 '-[number]' 将始终位于字符串的末尾,如果它不存在,代码将附加它,如上面的示例所示。
我想要一个适用于所有情况的模式...
【问题讨论】:
-
字符串可能看起来像“abcd efg -4 07-07-2011”,在这种情况下,所需的输出是“abcd efg -5 07-07-2011”。但是,字符串也可能看起来像 'abcd efg - 07-07-2011',在这种情况下它应该返回 'abcd efg - 07-07-2011 -1'?我理解正确吗?
-
-[number] 或更准确的模式将是 '
- ' 将始终位于字符串的末尾...
标签: tsql pattern-matching