Şimdi Ara

MSSQL nvarchar alanı int gibi sıralama

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir - 3 Masaüstü
5 sn
8
Cevap
1
Favori
900
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • sorum aslında oldukça kısa ve net

    nvarchar tipindeki field'daki veriler şu şekilde

    1
    1.1
    1.1.1
    1.1.2
    2.1
    2.2

    10.1
    10.2
    10.2.1
    10.2.2
    11.1
    11.1.1

    bunları bu şekilde sıralatmak için order veya select bloğuna ne yapılabilir?

    Not: numeric çalışmıyor birden fazla nokta olduğunda, case ile çözmeye çalıştım ama bi sonuç elde edemedim. 1den sonra 10,11.. sonra 2



  • Bu alanları number'ı convert ettikten sonra sıralama yapabilirsin.

    Yada SQL cümlenin içinde order verebileceğin if koşulları ile sıralamayı SQL cümlene gömmen gerekecek.



    < Bu mesaj bu kişi tarafından değiştirildi coderMX -- 7 Eylül 2012; 14:03:30 >
    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Denemedim ama alırken alandakı . taları replace edip Integer alana cast et ondan sonra sıralayabilirsin
  • @coderMX:
    birden fazla "." olduğu için convert çalışmıyo, replace yapıp noktaları kaldırdığımda 1.1.1 ile 11.1 aynı şey olduğundan o da çözmedi sorunu.

    doğru sonuç veren çözümü ürettim (nekadar doğrudur bilmem ama çalışıyo:) ), daha sonra başkasının işiene gerekebilir diye paylaşayım çözümü

     
    SELECT
    HIERARCHY
    FROM DEPARTMENT
    WHERE HIERARCHY IS NOT NULL
    ORDER BY
    CASE
    WHEN CHARINDEX('.',HIERARCHY) >=1 THEN
    CAST(LEFT(HIERARCHY,CHARINDEX('.',HIERARCHY)-1) AS NUMERIC)
    WHEN CHARINDEX('.',HIERARCHY) >=1 THEN
    CAST(LEFT(HIERARCHY,CHARINDEX('.',HIERARCHY)-1) AS NUMERIC)
    END,
    HIERARCHY
  • quote:

    Orijinalden alıntı: alpy

    @coderMX:
    birden fazla "." olduğu için convert çalışmıyo, replace yapıp noktaları kaldırdığımda 1.1.1 ile 11.1 aynı şey olduğundan o da çözmedi sorunu.

    doğru sonuç veren çözümü ürettim (nekadar doğrudur bilmem ama çalışıyo:) ), daha sonra başkasının işiene gerekebilir diye paylaşayım çözümü

     
    SELECT
    HIERARCHY
    FROM DEPARTMENT
    WHERE HIERARCHY IS NOT NULL
    ORDER BY
    CASE
    WHEN CHARINDEX('.',HIERARCHY) >=1 THEN
    CAST(LEFT(HIERARCHY,CHARINDEX('.',HIERARCHY)-1) AS NUMERIC)
    WHEN CHARINDEX('.',HIERARCHY) >=1 THEN
    CAST(LEFT(HIERARCHY,CHARINDEX('.',HIERARCHY)-1) AS NUMERIC)
    END,
    HIERARCHY


    ilk noktaya kadar olan rakam maximum kaç karakter olabilir ?

    yani
    1.1
    10.1
    100.1
    1000.1 die devam edip sonsuza mi gider yoksa 100'de falan bitermi?




  • quote:

    Orijinalden alıntı: Romansanta

    quote:

    Orijinalden alıntı: alpy

    @coderMX:
    birden fazla "." olduğu için convert çalışmıyo, replace yapıp noktaları kaldırdığımda 1.1.1 ile 11.1 aynı şey olduğundan o da çözmedi sorunu.

    doğru sonuç veren çözümü ürettim (nekadar doğrudur bilmem ama çalışıyo:) ), daha sonra başkasının işiene gerekebilir diye paylaşayım çözümü

     
    SELECT
    HIERARCHY
    FROM DEPARTMENT
    WHERE HIERARCHY IS NOT NULL
    ORDER BY
    CASE
    WHEN CHARINDEX('.',HIERARCHY) >=1 THEN
    CAST(LEFT(HIERARCHY,CHARINDEX('.',HIERARCHY)-1) AS NUMERIC)
    WHEN CHARINDEX('.',HIERARCHY) >=1 THEN
    CAST(LEFT(HIERARCHY,CHARINDEX('.',HIERARCHY)-1) AS NUMERIC)
    END,
    HIERARCHY


    ilk noktaya kadar olan rakam maximum kaç karakter olabilir ?

    yani
    1.1
    10.1
    100.1
    1000.1 die devam edip sonsuza mi gider yoksa 100'de falan bitermi?

    yıllarca kullanılacak bir yazılım olduğundan rakamın kaça kadar gideceğini kestirmek zor. herhangi bir sınırı olmayacağını düşünüp ona göre genel ve kalıcı bir çözüm üretmek gerekir bence herzaman. heralde bundan daha yüksek veri değerleri olmaz diye günü kurtaran çözümler üretmek pek bana göre değil;)




  • quote:

    Orijinalden alıntı: alpy

    quote:

    Orijinalden alıntı: Romansanta

    quote:

    Orijinalden alıntı: alpy

    @coderMX:
    birden fazla "." olduğu için convert çalışmıyo, replace yapıp noktaları kaldırdığımda 1.1.1 ile 11.1 aynı şey olduğundan o da çözmedi sorunu.

    doğru sonuç veren çözümü ürettim (nekadar doğrudur bilmem ama çalışıyo:) ), daha sonra başkasının işiene gerekebilir diye paylaşayım çözümü

     
    SELECT
    HIERARCHY
    FROM DEPARTMENT
    WHERE HIERARCHY IS NOT NULL
    ORDER BY
    CASE
    WHEN CHARINDEX('.',HIERARCHY) >=1 THEN
    CAST(LEFT(HIERARCHY,CHARINDEX('.',HIERARCHY)-1) AS NUMERIC)
    WHEN CHARINDEX('.',HIERARCHY) >=1 THEN
    CAST(LEFT(HIERARCHY,CHARINDEX('.',HIERARCHY)-1) AS NUMERIC)
    END,
    HIERARCHY


    ilk noktaya kadar olan rakam maximum kaç karakter olabilir ?

    yani
    1.1
    10.1
    100.1
    1000.1 die devam edip sonsuza mi gider yoksa 100'de falan bitermi?

    yıllarca kullanılacak bir yazılım olduğundan rakamın kaça kadar gideceğini kestirmek zor. herhangi bir sınırı olmayacağını düşünüp ona göre genel ve kalıcı bir çözüm üretmek gerekir bence herzaman. heralde bundan daha yüksek veri değerleri olmaz diye günü kurtaran çözümler üretmek pek bana göre değil;)

    şu yüzden sordum ;
    Tek düze Hesap Planına benzettim Muhasebe Prog. olabileceği geldi aklıma :)




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • quote:

    Orijinalden alıntı: seyfi84

    yapmak istediğin şeyi daha önce birisi çözmeye çalışmış, natural order diye geçiyor:
    http://sourcefrog.net/projects/natsort/
    algoritmik olarak fikrin olsun diye

    Teşekkür
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.