Tôi cần chuyển đổi dữ liệu từ bảng tính thành chèn câu lệnh trong SQL. Tôi đã làm việc ra hầu hết các biểu thức thông thường để sử dụng công cụ tìm và thay thế trong SSMS, nhưng tôi đang gặp phải vấn đề khi cố gắng tham chiếu đến mục thứ 9 được ngoặc trong lần thay thế cuối cùng của tôi.SQL tìm và thay thế giới hạn chụp biểu thức chính quy?
Đây là mẩu tin ban đầu:
Blue Doe 12/21/1967 1126 Queens Highway Torrance CA 90802 N 1/1/2012
Và đây là những gì tôi cần (bây giờ):
select 'Blue','Doe','19671221','1126 Queens Highway','Torrance','CA','90802','N','20120101'
Do hạn chế về số lượng các mục trong ngoặc đơn cho phép tôi phải chạy qua thay thế ba lần. Điều này có thể làm việc thành một thủ tục được lưu trữ nếu tôi có thể thực hiện đầu tiên làm công việc này như là một POC.
Đây là biểu hiện phù hợp đầu tiên:
^{: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}
Và thay thế: \10\2/0\3/\40\5/0\6/\7
này cho biết thêm số không vào những tháng và những ngày để họ có ít nhất hai nhân vật.
Kết quả khớp tiếp theo định dạng ngày theo định dạng được yêu cầu trong truy vấn (không có ý kiến về việc không sử dụng trường ngày tháng. Đây là yêu cầu của khách hàng đối với cơ sở dữ liệu).
Matching biểu:
^{: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}
Và thay thế: \1\4\(2,2)\(2,3)\5\8\(2,6)\(2,7)
Cuối cùng, trận chung kết sẽ chèn kết quả vào các câu lệnh SQL mà sẽ được sử dụng trong một tuyên bố chèn.
Matching biểu:
^{:w}:b{:w}:b{:z}:b{[0-9A-Za-z:b]+}:b{:w}:b{[A-Z]+}:b{:z}:b{:w}:b{:z}
Và thay thế: select '\1','\2','\3','\4','\5','\6','\7','\8','\9'
Tất cả các công trình ngoại trừ việc thay thế cuối cùng. Vì lý do nào đó, \ 9 KHÔNG nhận được dữ liệu từ trận đấu. Nếu tôi chỉ thay thế toàn bộ biểu thức thay thế bằng \ 9, tôi nhận được khoảng trống. Nếu tôi sử dụng \ 8, tôi nhận được N. Nếu tôi loại bỏ mục thứ 8 bị ngoặc, do đó làm cho mặt hàng thứ 9 của tôi thứ tám, nó trả về những gì tôi muốn, 20120101.
Vì vậy, câu hỏi của tôi là, SSMS/SQL cho phép được gắn thẻ 9 biểu thức khi sử dụng tìm/thay thế và biểu thức chính quy? Hay tôi đang thiếu thứ gì đó ở đây? Tôi biết có nhiều cách khác để làm điều này. Tôi chỉ cố gắng làm cho nó được thực hiện một cách nhanh chóng như là một POC trước khi chúng tôi di chuyển này vào một sproc hoặc ứng dụng.
Cảm ơn bạn đã hỗ trợ. -Peter
Bạn có thể nhập trực tiếp từ bảng tính. Dữ liệu đã có trong các cột riêng biệt chưa? – RedFilter
Tại sao bạn cần sử dụng thay thế? Nếu dữ liệu từ bảng tính và bạn đang sử dụng SSMS, tại sao không sử dụng trình quản lý nhập/xuất? Ngoài ra, tại sao định dạng lại dữ liệu, bảng tính không hỗ trợ định dạng ngày tháng/ngày/năm? Bạn không thể viết một số công thức ô để ghép một chuỗi chèn dữ liệu cho bạn? – Trisped
Vui lòng chỉnh sửa câu hỏi của bạn để thêm định dạng đúng các biểu thức mã. Bạn có thể làm điều này bằng cách: xung quanh với dấu sau ("' "), chọn tất cả và nhấp vào nút thanh công cụ' {} 'hoặc bằng cách đánh dấu một khối mã và nhấn Ctrl + K. Bạn có thể xem trước bài đăng của mình (trước khi đăng bài) ngay bên dưới nút "Gửi câu hỏi" khi bạn đang nhập; bản cập nhật xem trước trong thời gian thực, vì vậy đây là chế độ xem WYSIWYG. Định dạng đúng làm cho câu hỏi của bạn dễ đọc và dễ hiểu hơn, và do đó giúp bạn có nhiều câu trả lời hơn. Cảm ơn. :) –