Dizelerdeki sayıları gerçek sayılar olarak sıralamak için mantıklı ve etkili bir araç mı istiyorsunuz? Microsoft Connect önerim için oy vermeyi düşünün: Harmanlama seçeneği olarak "doğal sıralama" / DIGITSASNUMBERS desteği
Bu soru SQL Server'a özgü olsa da ve bu cevap açık olmasa da, bu bilgiyi sadece farkındalığı arttırmak ve diğer cevapların hiçbirine karşı çıkmamak için göndermem gerektiğini hissettim.
Bununla birlikte, SQL Server dışında, belirli ortamlarda bu tür bir sıralama yapmak mümkündür. En azından Unicode belgelerinde belirtilen bir şeydir. In UNICODE LOCALE VERİ ANLAMLANDIRMA DİL (LDML) BÖLÜM 5: COLLATION standart / raporda, bir grafik var Harmanlama Ayarları sıralama davranışını dikme için çeşitli seçenekler açıklanmıştır. Seçeneklerden biri -kn-true
veya [numericOrdering on]
:
Grubu Varsa ilgili , ondalık hane her dizisi ([olarak General_Category = Nd UAX44 ]) kendi sayısal değerle primer düzeyde sıralanır. Örneğin, "A-21" <"A-123". Hesaplanan birincil ağırlıkları başlangıcında hepsi basamaklı yeniden sıralama grubu. Böylece, uyarlanmamış bir UCA tablosu ile, "a $" <"a0" <"a2" <"a12" <"a⓪" <"aa".
Ancak, bu belge bir "teknik standart" tır ve temel Unicode spesifikasyonunun bir parçası değildir. Belgenin üstündeki bir not şunları belirtir:
Unicode Teknik Standardı (UTS) bağımsız bir özelliktir. Unicode Standardına uygunluk, herhangi bir UTS'ye uygunluk anlamına gelmez.
Bu nedenle, bu özel davranış, her ikisi de temel Unicode belirtimine uysa bile, SQL Server'da veya .NET'te (en azından yerel olarak) kullanılamaz.
Yoğun bakım projesi (Unicode için Uluslararası Bileşenler) uygular bu işlevsellik ve bunun bile bir online demo olduğu C / C ++ ve Java kütüphaneleri kümesidir. Ve "ilgili projeler" altında, ICU kütüphanesi için bu işlevselliğin yönetilen koda maruz kalmasına izin verecek bir COM nesne sarmalayıcısı gibi görünen bir .NET projesine bağlantı vardır. Ancak bu .NET projesinin hala etkin olup olmadığı açık değildir.
Ancak bu davranışı çalışırken görmek için YBÜ Harmanlama Demosuna gidin .
Aşağıdakileri sol taraftaki Girdi metin alanına yapıştırın :
1
2
10B
6
11
10A
3
10
Tüm seçenekleri "varsayılan" olarak ayarlayın. sortDüğmenin sağındaki "giriş satırı numaraları" seçeneğini işaretleyin ve "fark güçlü yanları" seçeneğinin işaretli olmadığından emin olun.
Click sortdüğmesi ve aşağıdakileri geri almalısınız:
[1] 1
[8] 10
[6] 10A
[3] 10B
[5] 11
[2] 2
[7] 3
[4] 6
Bu tipik bir dize sıralaması yaparken beklenen ve SQL Server'da gördüğünüz şeydir.
Şimdi, düğmenin hemen üzerindeki radyo düğmesi serisinde sort, ikinci sıra "sayısal" olarak etiketlenir. "Açık" radyo düğmesini seçin.
sortDüğmeyi tekrar tıklayın ve aşağıdakileri geri almalısınız:
[1] 1
[2] 2
[7] 3
[4] 6
[8] 10
[6] 10A
[3] 10B
[5] 11
Sayısal bölüm dizenin ortasındayken bunun işe yarayıp yaramadığını sorguluyor musunuz? Tamam, aşağıdakileri sol taraftaki Giriş metin alanına yapıştırın (önceki listenin yerini alarak):
Script - 1.sql
Script - 2.sql
Script - 10B.sql
Script - 6.sql
Script - 11.sql
Script - 10A.sql
Script - 3.sql
Script - 10.sql
Sayısal ayarın "açık" olarak ayarlandığından emin olun . sortDüğmeyi tekrar tıklayın ve aşağıdakileri geri almalısınız:
[1] Script - 1.sql
[2] Script - 2.sql
[7] Script - 3.sql
[4] Script - 6.sql
[8] Script - 10.sql
[6] Script - 10A.sql
[3] Script - 10B.sql
[5] Script - 11.sql
Bunu başka bir yerde görmek ister misiniz? Sabit sürücünüzde C: \ temp \ sorting \ gibi bir klasör oluşturun ve aynı "Script -..." adlarında boş dosyalar oluşturun. Bir Do DIR
bir komut penceresinde ve standart sıralamayı göreceksiniz. Ancak Windows Gezgini'nde dosya listesine bakarken listenin "sayısal" seçeneği kullanılarak sıralanmış olduğunu göreceksiniz :-).