2011-12-16 38 views
9

Tôi đang viết một ứng dụng PHP và MySQL, trong đó tôi phải nối nhiều giá trị cột vào một cột duy nhất. Tôi đã sử dụng hàm concat(), nhưng nó không xử lý các giá trị null và concat_ws(), không trả lại kết quả trong đầu ra mà tôi muốn. gì tôi cần có thể đạt được trong cơ sở dữ liệu Oracle như thế này:Giá trị concat trong MySQL Query (Để xử lý giá trị Null)

Select 'The Surname Is'||last_name from employees; 

Issue của tôi là làm thế nào tôi có thể đạt được kết quả này tương tự với MySQL..without sử dụng các chức năng có tên nêu trên?

Trả lời

24

CONCAT với IFNULL:

SELECT 
    CONCAT('The Surname Is ', IFNULL(last_name, 'sadly not available')) 
FROM `employees` 
2

Sử dụng coalesce để concat một chuỗi rỗng

select concat(coalesce(null, '')); 
10

Bạn cũng có thể sử dụng CONCAT_WS chức năng mà sẽ chăm sóc của NULL giá trị

SELECT 
CONCAT_WS(' ','The Surname Is',lastname) 
FROM `employees` 
6

@Minesh : CONCAT_WS không 'chú ý' các giá trị NULL. Để minh họa điều này ...

CONCAT_WS("~",house.name,house.address,house.type) 

Trong ví dụ trên, nếu house.addressNULL kết quả trả về sẽ không chứa một Tilda đôi gọn gàng (~~) như mong đợi. Nó sẽ là một danh sách tách biệt với tilda chỉ với 1 tilda. ví dụ: "vui vẻ Nhà ~ dinh thự"

+1

nó loại bỏ nó cùng với đó là phân cách, ở đâu vấn đề trong đó? đó là giải pháp gọn gàng trừ khi bạn muốn làm điều gì đó khác – CME64

+1

Tôi coi nó là xấu bởi vì hàm thực hiện 2 nhiệm vụ khác nhau, thứ hai trong số đó không được gợi ý bởi tên hàm. Đầu tiên nó nối, tuyệt vời, cảm ơn, đó là những gì tôi muốn. Sau đó, nó loại bỏ các mục danh sách chuỗi rỗng, woah, tôi đã không yêu cầu bạn làm điều đó. Hàm này nên được gọi là CONCAT_NN_WS() trong đó NN là viết tắt của "Not Nulls". Nếu tôi yêu cầu phần mềm của tôi chỉ ghép 5 thứ vào một danh sách, tôi mong đợi một danh sách 5 mục. Sau đó tôi không mong đợi phần mềm sẽ nói "Ồ, nhân tiện, tôi làm trống thùng, cho mèo ăn và gọi điện cho mẹ của bạn để mời cô ấy vào cuối tuần" –

+0

Bạn nói đúng điều này sẽ hữu ích và cần có được thực hiện (giữ nguyên phương pháp này cho các mục đích khác). – CME64

0

Một mẹo nhỏ: Sử dụng chuỗi rỗng như tách với CONCAT_WS (Một số lần bạn wan't chèn dấu cách trắng)

CONCAT_WS('','The Surname Is:',lastname) 
FROM `employees` 
Các vấn đề liên quan