2012-08-07 39 views
5

Giả sử tôi có một số bảng trong cơ sở dữ liệu SQL với nhiều dữ liệu và một số hàng là gần như giống hệt nhau, ví dụ:Làm thế nào để viết truy vấn mà sẽ làm khác biệt khác biệt chọn từ bảng sql?

|===========================================| 
|   Message       | 
|===========================================| 
|    ...       | 
|-------------------------------------------| 
| account is rejected: <aa>    | 
|-------------------------------------------| 
| account is rejected: <bb>    | 
|-------------------------------------------| 
| mailbox unavailable: 550 550 <[email protected]> | 
|-------------------------------------------| 
| mailbox unavailable: 550 550 <[email protected]> | 
|-------------------------------------------| 
|     ...      | 

cho các mục đích của tôi 2 dòng đầu tiên là giống hệt nhau và 2 dòng cuối cùng là giống hệt nhau, vì vậy truy vấn sẽ trả về

  1. tài khoản bị từ chối:
  2. hộp thư không có sẵn: 550 550

Tôi nghĩ để viết truy vấn mà sẽ lựa chọn hàng, loại bỏ ký tự sau '<' dấu hiệu và sẽ làm DISTINCT, nhưng tôi không biết làm thế nào để làm tất cả những gì trong SELECT

Bạn có thể giúp tôi viết truy vấn như vậy ?

+1

Mọi thông báo đều có '<' trong đó không? Và bạn sẽ luôn luôn muốn bỏ qua mọi thứ từ * đầu tiên * '<' trở đi? – MatBailie

+0

@ Dường, không phải mọi thư đều có một '<' – theateist

Trả lời

5

Sau đây xóa mọi thứ khỏi số < đầu tiên trở đi.

GROUP BY linh hoạt hơn sử dụng DISTINCT nhưng hoàn thành điều tương tự trong trường hợp này.

Tuyên bố CASE có sẵn để phục vụ cho khả năng thư không có < trong đó. Nếu có luôn luôn a < Sau đó, chỉ cần sử dụng phần ELSE thay thế.

SELECT 
    CASE WHEN CHARINDEX('<', Message) = 0 THEN Message ELSE LEFT(Message, CHARINDEX('<', Message)-1)) END AS Message 
FROM 
    yourTable 
GROUP BY 
    CASE WHEN CHARINDEX('<', Message) = 0 THEN Message ELSE LEFT(Message, CHARINDEX('<', Message)-1)) END 
+0

+1 tại điểm! :) –

+0

@ Dems, tôi có thể sử dụng regex trong trường hợp đã chọn không? – theateist

+0

@theateist - Không phải trên TSQL trừ khi bạn đã viết của riêng bạn. Nhưng bạn không cần phải, CHARINDEX() làm những gì bạn cần ... – MatBailie

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