我需要将电子表格中的数据转换为SQL中的插入语句。我已经制定了大部分使用SSMS中的查找和替换工具的正则表达式,但是当我试图引用最终替换中的第9个加括号的项时遇到了一个问题。SQL查找和替换正则表达式捕获组限制?
这里是原始记录:
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)
最后,最后一场比赛将插入到结果将在INSERT语句习惯的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.如果我消除第8个括号内的项目,从而使我的第9项第8,它返回我想要的,20120101.
所以我的问题是,SSMS/SQL是否允许9标记使用查找/替换和正则表达式时的表达式?或者我在这里错过了什么?我知道还有其他方法可以做到这一点。我只是试图在将其转换为存档或应用程序之前尽快将其作为POC完成。
感谢您的任何帮助。 -Peter
您可以直接从电子表格导入。数据是否已经在单独的列中? – RedFilter 2012-03-29 17:37:11
为什么你需要使用替换?如果数据来自电子表格并且您正在使用SSMS,为什么不使用导入/导出管理器?另外,为什么重新格式化数据,电子表格不支持mm/dd/yyyy日期格式?难道你不能写一些单元格公式来连接一个插入数据的字符串吗? – Trisped 2012-03-29 17:40:52
请编辑您的问题以添加适当格式的代码表达式。你可以这样做:围绕反引号(“'”),全选并单击工具栏按钮'{}',或者标记一段代码并按下Ctrl + K。您可以在输入时立即在“提交问题”按钮下方预览帖子(发布之前);预览实时更新,所以这是一个所见即所得的视图。正确格式化使您的问题更易于阅读和理解,因此使您更有可能得到答案。谢谢。 :) – 2012-03-29 17:44:12