Necesito convertir datos de una hoja de cálculo en instrucciones de inserción en SQL. He resuelto la mayoría de las expresiones regulares para usar la herramienta de búsqueda y reemplazo en SSMS, pero me encuentro con un problema al tratar de hacer referencia al noveno elemento entre paréntesis en mi reemplazo final.SQL buscar y reemplazar el límite de grupo de captura de expresiones regulares?
Aquí está el registro original:
Blue Doe 12/21/1967 1126 Queens Highway Torrance CA 90802 N 1/1/2012
Y esto es lo que necesito (por ahora):
select 'Blue','Doe','19671221','1126 Queens Highway','Torrance','CA','90802','N','20120101'
Debido a las limitaciones en el número de elementos entre paréntesis se admiten tengo que correr a través el reemplazo tres veces. Esto puede funcionar en un procedimiento almacenado si primero puedo hacer que esto funcione como un POC.
Ésta es la primera expresión coincidente:
^{: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}
Y la sustitución: \10\2/0\3/\40\5/0\6/\7
Esto añade ceros a los meses y los días para que tengan al menos dos caracteres.
La próxima coincidencia reformatea las fechas en el formato requerido en la consulta (no hay comentarios sobre el uso de un campo de fecha. Este es un requisito del cliente para la base de datos).
Coincidencia de expresión:
^{: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}
Y la reemplace: \1\4\(2,2)\(2,3)\5\8\(2,6)\(2,7)
Finalmente, el último partido inserta los resultados en la instrucción SQL que se acostumbrará en una instrucción de inserción.
Coincidencia de expresión:
^{:w}:b{:w}:b{:z}:b{[0-9A-Za-z:b]+}:b{:w}:b{[A-Z]+}:b{:z}:b{:w}:b{:z}
Y la sustitución: select '\1','\2','\3','\4','\5','\6','\7','\8','\9'
funciona todo excepto el último reemplazo. Por algún motivo, el \ 9 NO obtiene los datos del partido. Si simplemente reemplazo toda la expresión de reemplazo con \ 9, obtengo un espacio en blanco. Si uso \ 8, obtengo N. Si elimino el 8º elemento entre paréntesis, convirtiendo así mi noveno ítem en octavo, devuelve lo que quiero, 20120101.
Así que mi pregunta es, ¿permite SSMS/SQL etiquetar 9? expresiones al usar find/replace y expresiones regulares? ¿O me estoy perdiendo algo aquí? Sé que hay otras formas de hacer esto. Solo estoy tratando de hacerlo rápidamente como un POC antes de mover esto a un sproc o aplicación.
Gracias por cualquier ayuda. -Peter
Puede importar desde una hoja de cálculo directamente. ¿Los datos ya están en columnas separadas? – RedFilter
¿Por qué necesita reemplazar? Si los datos provienen de una hoja de cálculo y está utilizando SSMS, ¿por qué no utilizar el administrador de importación/exportación? Además, ¿por qué reformatear los datos? ¿La hoja de cálculo no admite formatos de fecha mm/dd/aaaa? ¿No podría escribir algunas fórmulas de celda para concatenar una cadena que inserta los datos por usted? – Trisped
Edite su pregunta para agregar el formato adecuado de las expresiones de código. Puede hacer esto: rodeando con patillas ("' "), seleccionando todo y haciendo clic en el botón de la barra de herramientas' {} ', o marcando un bloque de código y presionando Ctrl + K. Puede obtener una vista previa de su publicación (antes de publicarla) inmediatamente debajo del botón "Enviar pregunta" mientras la ingresa; las actualizaciones de vista previa en tiempo real, por lo que es una vista WYSIWYG. El formateo adecuado hace que su pregunta sea más fácil de leer y comprender, y por lo tanto aumenta la probabilidad de que obtenga una respuesta. Gracias. :) –