2012-08-07 20 views
5

Ben birçok verilerle SQL Veritabanı bazı tablo var ve bazı satırları örneğin hemen hemen aynı olduğunu varsayalım: my amaçlar içinOlağandışı ayrı bir sql tablosundan seçim yapacak sorgu nasıl yazılır?

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

2 ilk satırları aynıdır ve 2 son satırlar bu yüzden, aynı

  • posta kutusu kullanılamaz: 550 550
  • sorgu

    1. hesap reddedilir dönmelidir

      Ben, satırları seçin '<' işaretinden sonraki karakter ortadan kaldırmak ve DISTINCT yapacak olacaktır sorguyu yazmak için düşünmüştüm ama SELECT

      beni böyle sorguyu yazmak için yardımcı olabilir tüm bu yapmak nasıl bilmiyorum ?

    +1

    Her iletinin içinde bir '<' işareti olacak mı? Ve her zaman, her şeyden * ilk * '' 'den gelenleri görmezden gelmek ister misiniz? – MatBailie

    +0

    @Dems, her mesajın bir <' – theateist

    cevap

    5

    Aşağıdakiler, ilk <'dan itibaren her şeyi kaldırır.

    GROUP BY, DISTINCT kullanmaktan daha esnektir, ancak bu durumda aynı şeyi gerçekleştirir.

    CASE ifadesi, içinde < bulunmayan iletilerin olasılığını karşılayacaktır. her zaman< varsa, bunun yerine ELSE bölümünü kullanın.

    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 noktasında olması gerekmez! :) –

    +0

    @Dems, select/case'de regex kullanabilir miyim? – theateist

    +0

    @theateist - Kendi yazdığınız sürece TSQL değil. Ama gerek yok, CHARINDEX() ihtiyacınız olanı yapar ... – MatBailie

    İlgili konular