2015-04-08 32 views
6

Tôi có các chuỗi như 'keepme: cutme' hoặc 'string-without-separator' sẽ trở thành 'keepme' và 'string-without-separator'. Điều này có thể được thực hiện trong PostgreSQL không? Tôi cố gắng:Cắt chuỗi sau lần xuất hiện đầu tiên của một ký tự

select substring('first:last' from '.+:') 

Nhưng điều này rời : trong và sẽ không hoạt động nếu không có : trong chuỗi.

Trả lời

16

Sử dụng split_part():

SELECT split_part('first:last', ':', 1) AS first_part 

Trả lại toàn bộ chuỗi nếu delimiter là không có. Và thật đơn giản để có được phần thứ 2 hoặc thứ 3, v.v.

Nhanh hơn đáng kể so với các hàm sử dụng đối sánh cụm từ thông dụng. Và kể từ khi chúng tôi có một dấu phân cách cố định, chúng tôi không cần sự kỳ diệu của các biểu thức thông thường.

liên quan:

1

regexp_replace() có thể là tình trạng quá tải cho những gì bạn cần, nhưng nó cũng cung cấp cho các lợi ích bổ sung của regex. Ví dụ: nếu chuỗi sử dụng nhiều dấu phân cách.

Ví dụ sử dụng:

select regexp_replace('first:last', E':.*', ''); 
0

SQL Select để chọn tất cả mọi thứ sau khi xảy ra cuối cùng của một nhân vật

select right('first:last', charindex(':', reverse('first:last')) - 1) 
Các vấn đề liên quan