2012-04-10 29 views
10

Đối mặt với một vấn đề, có vẻ như dữ liệu của tôi được lưu trữ trong SQL Server không được lưu trữ chính xác, chỉ cần đặt, làm thế nào để xác minh rằng một dữ liệu varchar có vận chuyển trở lại và dòng nguồn cấp dữ liệu trong nó? Tôi cố gắng in chúng ra, không hiển thị các ký tự đặc biệt. Cảm ơnLàm thế nào để kiểm tra dữ liệu của tôi trong SQL Server có vận chuyển trở lại và dòng nguồn cấp dữ liệu?

Trả lời

17

Bạn có thể sử dụng các chức năng char(n) và của SQL Server để khớp với nội dung trường trong mệnh đề WHERE của bạn.

 
carriage return: char(13) 
line feed:  char(10) 

SQL sau đây sẽ tìm thấy tất cả các hàng trong some_table nơi các giá trị của some_field chứa xuống dòng và/hoặc vận chuyển trở lại ký tự:

SELECT * FROM some_table 
WHERE CONTAINS(some_field, char(13)) OR CONTAINS(some_field, char(10)) 

Để loại bỏ kí tự xuống dòng trong some_field giá trị của bạn, bạn có thể sử dụng replace() hoạt động lâu dài với char() và . SQL sẽ trông giống như sau:

UPDATE some_table 
SET some_field = REPLACE(some_field, char(13), '') 
WHERE CONTAINS(some_field, char(13)) 

Để xóa các dòng mới, bạn có thể theo dõi câu lệnh cuối cùng với phiên bản cập nhật đó. Làm thế nào bạn làm tất cả phụ thuộc vào những loại dòng mới mà văn bản của bạn chứa. Tuy nhiên, tùy thuộc vào vị trí văn bản được chèn/dán từ các dòng mới có thể là \ r \ n hoặc \ n để chạy các cập nhật đối với cả hai ký tự \ r và \ n sẽ an toàn hơn giả sử rằng bạn đang nhận được một phiên bản của dòng mới hoặc cai khac.

Lưu ý rằng nếu các dòng mới bị xóa và bạn muốn giữ lại chúng thì bạn phải khắc phục sự cố tại điểm nhập cảnh. Bạn không thể thay thế hoặc sửa chữa những gì đã bị xóa, do đó bạn nên lưu dữ liệu văn bản gốc vào cột mới chứa văn bản gốc, chưa sửa đổi.

+2

'SSMS' cho tôi lỗi khi cố gắng chạy tập lệnh' UPDATE' của bạn 'Cú pháp không chính xác gần 'char'.' với' char (13) 'cuối cùng được gạch chân bằng các đường thẳng. Lơ lửng trên wigglies nó nói 'cú pháp sai gần 'char'. Mong STRING, TEXT_LEX hoặc VARIABLE' – whytheq

+0

@whytheq: Bạn đang đặt câu hỏi trong phần nhận xét. Tôi hiểu rằng nó liên quan đến/dựa trên câu trả lời của tôi nhưng thật khó để đoán những gì đang xảy ra w/o nhìn thấy các truy vấn thực sự bạn đang sử dụng và cấu trúc bảng bạn đang chạy chống lại. Vui lòng đăng câu hỏi. Cảm ơn. –

+0

lời xin lỗi: Tôi đã tạo một câu hỏi và nhận được câu trả lời: http://stackoverflow.com/questions/26145996/contains-unhappy-with-char13 – whytheq

3

Hãy xem chức năng Char. Xem MSDN. Điều này sẽ giúp tìm kiếm các ký tự đặc biệt.

4

Để thêm vào những gì người khác đã nói; khi tôi cần nhúng dòng mới vào T-SQL, tôi có xu hướng làm;

DECLARE @nl CHAR(2) = CHAR(13) + CHAR(10); 

.. sau đó sử dụng @nl khi được yêu cầu. Đó là dành cho Windows-endings, một cách tự nhiên.

+5

(Tôi gọi cho tôi là '@ CRLF') –

Các vấn đề liên quan