Nếu trường cuối cùng của bạn luôn hiện diện (mặc dù trailing nullcols
gợi ý là không) và bạn có một số quyền kiểm soát định dạng, bạn có thể sử dụng CONTINUEIF
chỉ thị coi dòng thứ hai là một phần của cùng một bản ghi lôgic.
Nếu comments
trường luôn hiện diện và được đặt trong dấu ngoặc kép thì bạn có thể thực hiện:
...
truncate
continueif last != x'22'
into table ...
Cái nào sẽ xử lý các bản ghi dữ liệu như:
S;Y;"Test 1"
F;N;"Test 2"
P;Y;"Test with
new line"
P;N;""
Hoặc nếu bạn luôn có dấu phân cách sau trường nhận xét, cho dù trường đó có được điền hay không:
...
truncate
continueif last != ';'
into table ...
Điều nào sẽ xử lý:
S;Y;Test 1;
F;N;"Test 2";
P;Y;Test with
new line;
P;N;;
Cả hai cách sẽ tải dữ liệu dưới dạng:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test withnew line
P N
Nhưng điều này làm mất dòng mới từ dữ liệu. Để giữ điều đó, bạn cần có dấu phân cách trường kết thúc và thay vì CONTINUEIF
bạn có thể thay đổi dấu phân tách bản ghi bằng cách sử dụng định dạng bản ghi luồng
:
...
infile 'C:\Users\lab.csv' "str ';\n'"
truncate
into table ...
"str ';\n'"
định nghĩa phần tử kết thúc là sự kết hợp của phần tử kết thúc trường và một ký tự dòng mới. Nhận xét phân tách của bạn chỉ có sự kết hợp đó trên dòng cuối cùng. Với cùng một tệp dữ liệu như phiên bản trước, điều này cho:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test with
new line
P N
4 rows selected.
Vì bạn đang sử dụng Windows, bạn có thể phải bao gồm \r
ở định dạng, ví dụ:"str ';\r\n'"
, nhưng tôi không thể kiểm tra điều đó.