2009-07-28 26 views
6

Tôi đang chạy bản Tuyên Bố này:Oracle - cách xóa không gian trắng?

select trim(a),trim(b) from table x; 

Mặc dù tôi đã sử dụng các báo cáo trim(), sản lượng của tôi trông như thế này:

A               B        
___               ____ 
kunjramansingh            smartdude 

Các kiểu dữ liệu của cột 'a' và 'b' là varchar2 (255).

Có khoảng cách giữa dữ liệu của hai đầu ra. Tôi muốn hiển thị dữ liệu mà không có khoảng trắng - theo định dạng như sau:

A    B 
___   ______ 
kunjramansinghsmartdude 

Tôi làm cách nào để thực hiện việc này?

+0

Chờ, chúng ta đang nói dữ liệu trả về hoặc màn hình kết quả truy vấn? SQL * PLUS? – curtisk

+0

Hi curtisk, Chúng tôi đang nói về dữ liệu được trả về> –

Trả lời

12
SELECT REGEXP_REPLACE('A B_ __ kunjramansingh smartdude', '\s*', '') 
FROM dual 

--- 
AB___kunjramansinghsmartdude 

Cập nhật:

chuỗi Chỉ cần nối:

SELECT a || b 
FROM mytable 
+0

tốt đẹp! chỉ cần lưu ngày của tôi ... – CFNinja

5

Nếu tôi hiểu đúng, đây là những gì bạn muốn

select (trim(a) || trim(b))as combinedStrings from yourTable 
3

này nghe có vẻ như một vấn đề định dạng đầu ra ? Nếu sử dụng SQL Plus, sử dụng lệnh COLUMN như thế này (giả sử bạn muốn có một chiều rộng hiển thị tối đa 20 ký tự cho mỗi):

column a format a20 
column b format a20 
select a, b from mytable; 
+0

cũng anh ấy đã có nó được bảo hiểm ngay bây giờ, hoặc là kịch bản :) – curtisk

1

SQL Plus sẽ định dạng các cột để giữ tối đa thể giá trị, mà trong trường hợp này là 255 ký tự.

Để xác nhận rằng đầu ra của bạn không thực sự chứa những không gian thêm, hãy thử này:

SELECT 
    '/' || TRIM(A) || '/' AS COLUMN_A 
,'/' || TRIM(B) || '/' AS COLUMN_B 
FROM 
    MY_TABLE; 

Nếu '/' nhân vật được tách ra từ đầu ra của bạn, sau đó chỉ ra rằng nó không phải là không gian, nhưng một số khác khoảng trắng ký tự có trong đó (các tab, ví dụ). Nếu đúng như vậy, có thể đó là vấn đề xác thực đầu vào ở đâu đó trong ứng dụng của bạn.

Tuy nhiên, tình huống có khả năng nhất là ký tự '/' trên thực tế sẽ chạm vào phần còn lại của chuỗi của bạn, do đó chứng minh rằng khoảng trắng thực sự được cắt.

Nếu bạn muốn xuất chúng lại với nhau, thì câu trả lời được đưa ra bởi Quassnoi nên làm điều đó.

Nếu nó hoàn toàn là vấn đề hiển thị, thì câu trả lời được đưa ra bởi Tony Andrews sẽ hoạt động tốt.

11

Dường như bạn đang thực hiện truy vấn trong sqlplus. Sqlplus cần đảm bảo rằng có đủ chỗ trong khoảng cách cột để kích thước chuỗi tối đa có thể được hiển thị (255). Thông thường, giải pháp là sử dụng các tùy chọn định dạng cột (Chạy trước truy vấn: cột A20 định dạng) để giảm kích thước chuỗi tối đa (các dòng vượt quá độ dài này sẽ được hiển thị trên nhiều dòng).

-1

Run dưới đây truy vấn thay thế TABLE_NAME & COLUMN_NAME mới với tên cột bảng & thực tế của bạn:

UPDATE TABLE_NAME SET COLUMN_NAME=TRIM(' ' from COLUMN_NAME); 
3

bạn có thể sử dụng 'RPAD' trong truy vấn chọn của bạn và xác định kích thước ...

select rpad(a , 20) , rpad(b, 20) from x ; 

trong đó tham số đầu tiên là tên cột và thông số thứ hai là kích thước mà bạn muốn đệm.

0

Sử dụng sau đây để đảm bảo không có khoảng trắng ở đầu ra của bạn:

select first_name || ',' || last_name from table x; 

Output

John, Smith

Jane Doe

1
REPLACE(REPLACE(a.CUST_ADDRESS1,CHR(10),' '),CHR(13),' ') as ADDRESS 
1

Say, chúng tôi có một cột với các giá trị bao gồm các ký tự chữ và số chỉ underscore. Chúng ta cần cắt cột này ra khỏi tất cả các khoảng trống, các tab hoặc bất kỳ ký tự trắng nào. Ví dụ dưới đây sẽ giải quyết vấn đề. Một cắt và một bản gốc cả hai đang được hiển thị để so sánh. select '/'||REGEXP_REPLACE(my_column,'[^A-Z,^0-9,^_]','')||'/' my_column,'/'||my_column||'/' from my_table;

0

Nếu bạn muốn thay thế không gian trắng trong một giá trị cột cụ thể, bạn có thể sử dụng kịch bản sau đây để làm công việc cho bạn,

UPDATE TableName TN 
    SET TN.Column_Name = TRIM (TN.Column_Name); 
Các vấn đề liên quan