Czasami po prostu nie masz wyboru, że musisz przechowywać numery zmieszane z tekstem. W jednej z naszych aplikacji host witryny, z której korzystamy w naszej witrynie e-commerce, dynamicznie tworzy filtry z list. Nie ma opcji sortowania według pola, ale wyświetlany tekst.Kiedy chcieliśmy, aby filtry zostały zbudowane na liście, która mówiła, że takie rzeczy jak 2 "do 8" 9 "do 12" 13 "do 15" itp., Potrzebowaliśmy sortowania 2-9-13, a nie 13-2-9 jako będzie to podczas odczytywania wartości numerycznych. Użyłem więc funkcji SQL Server Replicate wraz z długością najdłuższego numeru, aby wstawić dowolne krótsze liczby z wiodącą przestrzenią. Teraz 20 jest sortowane po 3 i tak dalej.
Pracowałem z widokiem, który dawał mi minimalne i maksymalne długości, szerokości itp. Dla rodzaju i klasy przedmiotu, a tutaj jest przykład tego, jak zrobiłem tekst. (LB n niski i LB n wysokie są niskie i wysokie koniec nawiasach długości 5.)
REPLICATE(' ', LEN(LB5Low) - LEN(LB1High)) + CONVERT(NVARCHAR(4), LB1High) + '" and Under' AS L1Text,
REPLICATE(' ', LEN(LB5Low) - LEN(LB2Low)) + CONVERT(NVARCHAR(4), LB2Low) + '" to ' + CONVERT(NVARCHAR(4), LB2High) + '"' AS L2Text,
REPLICATE(' ', LEN(LB5Low) - LEN(LB3Low)) + CONVERT(NVARCHAR(4), LB3Low) + '" to ' + CONVERT(NVARCHAR(4), LB3High) + '"' AS L3Text,
REPLICATE(' ', LEN(LB5Low) - LEN(LB4Low)) + CONVERT(NVARCHAR(4), LB4Low) + '" to ' + CONVERT(NVARCHAR(4), LB4High) + '"' AS L4Text,
CONVERT(NVARCHAR(4), LB5Low) + '" and Over' AS L5Text
Twoja kolumna jest typu varchar z powodu których stoją takie zachowanie. – Meherzad
jaki jest typ danych kolumny registration_no? –
Użyj 'order by registration_no + 0 asc' aby rozwiązać swój problem. – Meherzad