2010-12-13 19 views
18

Trong một cột trong chuỗi, chúng ta có thể có số/ký tự đặc biệt/khoảng trắng. Tôi muốn thay thế số/ký tự đặc biệt/khoảng trắng bằng char trống, tôi thấy có chức năng tên là regexp_replace nhưng cách sử dụng không giúp người dùng thân thiện như ví dụ tôi muốn sử dụng chuỗi sau.postgres regexp_replace chỉ muốn cho phép a-z và A-Z

String = 'abc$wanto&toremove#special~chars' 

Tôi muốn loại bỏ tất cả các ký tự đặc biệt và số từ chuỗi trên muốn cho phép chỉ a-zA-Z phần còn lại của ký tự cần được thay thế bằng '' làm thế nào để làm điều đó?

Trả lời

43
select regexp_replace('abc$wanto&toremove#special~chars', '[^a-zA-Z]', '', 'g') 
0

nên là:

regexp_replace('abc$wanto&toremove#special~chars', '[^a-zA-Z]+', '') 
+0

nó sẽ không làm việc thử bằng yoursef chọn regexp_replace ('abc123', 'một-zA- Z ',' ') –

+0

Xin lỗi tôi đã bỏ lỡ các dấu ngoặc, và tiếc là tôi không thể kiểm tra nó cho thời điểm này – Pit

7

Để làm cho nó đơn giản hơn:

regexp_replace('abc$wanto&toremove#special~chars', '[^[:alpha:]]') 
+1

công trình này, mặc dù vì lý do nào đó dường như không có trong [tài liệu] (http://www.postgresql.org/ docs/9.3/static/functions-matching.html # POSIX-CLASS-SHORTHAND-ESCAPES-TABLE) –

+4

'chọn regexp_replace ('abc $ wanto & toremove # special ~ chars', '[^ [: alpha:]]', '' , 'g') ' –

3

Đối với tôi sau đây làm việc.

regexp_replace(code, '[^a-zA-Z0-9]+', '','g')  

Vì nó thêm bộ lọc chung để nó lặp lại regex cho toàn bộ chuỗi.

Ví dụ,

SELECT regexp_replace('Well- This Did-Not work&*($%%)_', '[^a-zA-Z0-9]+', '')  

Returns: "WellThis đã-Không làm việc & * ($ %%) _"

SELECT regexp_replace('Well- This Did-Not work&*($%%)_', '[^a-zA-Z0-9]+', '','g')  

Returns: "WellThisDidNotwork"

Trong đó có những nhân vật chúng tôi không muốn xóa.

+0

việc sử dụng g trong biểu thức ở trên có thể là gì bạn xin cho tôi biết –

+0

Đây là công cụ sửa đổi toàn cầu. "g dành cho tìm kiếm toàn cầu. Có nghĩa là nó sẽ khớp với tất cả các lần xuất hiện." Giải thích tại đây: https://stackoverflow.com/questions/12993629/what-is-the-meaning-of-the-g-flag- biểu thức chính quy –

+0

Cảm ơn. Đã tìm kiếm thứ gì đó để xóa khoảng trống nhưng không thể thực hiện được bằng cách chỉ định các loại khoảng trắng. Sử dụng một trận đấu ngược với các ký tự chữ và số sẽ dễ dàng hơn nhiều (miễn là bạn không có các ký tự đặc biệt mà bạn muốn giữ lại). – otocan

3

Nếu bạn muốn thay thế các char với gần char không đặc biệt, bạn có thể làm một cái gì đó như thế này:

select 
    translate(
    lower(name), ' ''àáâãäéèëêíìïîóòõöôúùüûçÇ', '--aaaaaeeeeiiiiooooouuuucc' 
) as new_name, 
    name 
from cities; 
Các vấn đề liên quan