以下是原始记录:
Blue Doe 12/21/1967 1126 Queens Highway Torrance CA 90802 N 1/1/2012
这是我目前需要的内容:
以及这些是我现在需要的(只列举一部分):
select 'Blue','Doe','19671221','1126 Queens Highway','Torrance','CA','90802','N','20120101'
由于括号数量的限制,我需要运行三次替换。如果我能够首先将其作为POC使其正常工作,则可能会转化为存储过程。
这是第一个匹配表达式:
^{:w:b:w:b}{:z}/{:z}/{:z:b[0-9A-Za-z:b]+:b:w:b[A-Z]+:b:z:b:w:b}{:z}/{:z}/{:z}
替换为:\10\2/0\3/\40\5/0\6/\7
这将在月份和日期前添加零,以确保它们至少有两个字符。
下一个匹配表达式将日期重新格式化为查询所需的格式(关于不使用日期字段的评论请忽略。这是客户对数据库的要求)。
匹配表达式:
^{:w:b:w:b}[0-9]*{[0-9]^2}/[0-9]*{[0-9]^2}/{:z}{:b[0-9A-Za-z:b]+:b:w:b[A-Z]+:b:z:b:w:b}[0-9]*{[0-9]^2}/[0-9]*{[0-9]^2}/{:z}
替换内容:\1\4\(2,2)\(2,3)\5\8\(2,6)\(2,7)
最终,最后匹配将结果插入到用于插入语句的 SQL 语句中。
匹配表达式:
^{:w}:b{:w}:b{:z}:b{[0-9A-Za-z:b]+}:b{:w}:b{[A-Z]+}:b{:z}:b{:w}:b{:z}
替换如下:select '\1','\2','\3','\4','\5','\6','\7','\8','\9'
所有的都正常工作,除了最后一个替换。由于某些原因,\9未能从匹配中获取数据。如果我用\9替换整个替换表达式,我会得到一个空格。如果我使用\8,我会得到N。如果我删除第八个括号项,即将我的第九个项目变为第八个,则会返回我想要的20120101。
所以我的问题是,当使用查找 / 替换和正则表达式时,SSMS / SQL是否允许使用9个带标签的表达式?还是我漏掉了什么?我知道有其他方法可以做到这一点。我只是想在将其移入sproc或应用程序之前快速完成POC。
感谢任何帮助。 -Peter