2012-06-06 23 views
12

Tôi cần một biểu thức SSIS để lấy phần bên trái của chuỗi trước dấu phân cách và sau đó đặt chuỗi mới vào cột mới. Tôi đã kiểm tra trong cột có nguồn gốc, có vẻ như không có biểu thức như vậy. "Chuỗi con" chỉ có thể trả về phần chuỗi có độ dài cố định.SSIS Cách lấy một phần của chuỗi bằng dấu phân cách

Ví dụ, với chuỗi phân cách '-':

Art-Reading    Should return Art 
Art-Writing    Should return Art 
Science-chemistry   Should return Science 

T.B. Tôi biết điều này có thể được thực hiện trong MySQL với SUBSTRING_INDEX(), nhưng tôi đang tìm kiếm tương đương trong SSIS hoặc ít nhất trong SQL Server

+0

bản sao có thể có của [Help with SubString in SSIS] (http://stackoverflow.com/questions/5324590/help-with-substring-in-ssis) – Echo

Trả lời

24

tất nhiên bạn có thể:

enter image description here

chỉ cần cấu hình cột xuất phát của bạn như thế này:

enter image description here

Đây là biểu thức để làm cho cuộc sống của bạn dễ dàng hơn:

SUBSTRING(name,1,FINDSTRING(name,"-",1) - 1) 

FYI, thứ hai "1" có nghĩa là để có được sự xuất hiện đầu tiên của chuỗi "-"

EDIT: biểu thức để đối phó với chuỗi mà không "-"

FINDSTRING(name,"-",1) != 0 ? (SUBSTRING(name,1,FINDSTRING(name,"-",1) - 1)) : name 
+0

Thx rất nhiều cho câu trả lời !! Tuy nhiên, một số giá trị của cột "name" không có seperator và trong trường hợp này, tôi muốn cột "new_name" sẽ giống như "name". Ví dụ. một trong những tên là "Khoa học", và new_name sẽ chỉ là "Khoa học". Vì vậy, toàn bộ quá trình sẽ như thế này: nếu tên có một seperator, sau đó sử dụng các giải pháp, khác, sao chép từ tên để new_name – Echo

+0

mà có thể dễ dàng được giải quyết với một biểu thức có điều kiện. Xem chỉnh sửa của tôi! – Diego

7

Bạn có thể chỉ định độ dài cần sao chép trong hàm SUBSTRING và kiểm tra vị trí của dấu gạch ngang bằng CHARINDEX

SELECT SUBSTRING(@sString, 1, CHARINDEX('-',@sString) - 1) 

Đối với các biểu hiện SSIS nó là khá nhiều mã giống nhau:

SUBSTRING(@[User::String], 1, FINDSTRING(@[User::String], "-", 1)-1) 
+0

cảm ơn bạn rất nhiều vì câu trả lời này ~! Tôi ước tôi có thể chọn hai người như những người được chấp nhận ... – Echo

10

Muộn còn hơn không, nhưng tôi muốn làm điều này quá và thấy điều này.

TOKEN(character_expression, delimiter_string, occurrence) 

TOKEN("a little white dog"," ",2) 

lợi nhuận ít nguồn dưới

http://technet.microsoft.com/en-us/library/hh213216.aspx

+1

Đây có lẽ là câu trả lời hay nhất ở đây. – Cos

+0

Tôi đã tìm kiếm điều này mãi mãi !! Câu trả lời hay nhất – SKh

0

nếu chiều dài SUBSTRING param lợi nhuận -1 sau đó nó dẫn đến lỗi, "Chiều dài -1 là không hợp lệ cho chức năng "SUBSTRING". Tham số chiều dài không được âm. Thay đổi tham số độ dài thành 0 hoặc giá trị dương. "