Rendezés varchar oszlop

szavazat
2

MS SQL adatbázis tábla files_master Van egy oszlop neve „AstNum” varchar(100)ez adatokat tartalmaznak, mint például: 1/1980 2/1980 11/1980 És így tovább, amikor rendezni az oszlop:

SELECT AstNum FROM Files_master ORDER BY AstNum ASC

Ez azt mutatja nekem a rekordok 1/1980,11/1980az oszlopban. /1980a megelőző évben perjel növekmény szám kérem, segítsen nekem, hogyan kell rendezni a rekordokat akarok itt eredmény 1/1980 2/1980 3/1980

A kérdést 20/01/2016 07:35
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
3

Próbáld ezt

Select AstNum from Files_master Order by convert(datetime,'1/'+AstNum,101) ASC 

EDIT: észrevételek alapján az, itt van egy másik megoldás

Select AstNum from Files_master 
Order by 
parsename(replace(AstNum,'/','.'),2)*1 ASC,parsename(replace(AstNum,'/','.'),1)*1 ASC
Válaszolt 20/01/2016 07:45
a forrás felhasználó

szavazat
2

Ez egyszerűen nem így működik, és valószínűleg sérti a szabványos adatbázis szabályokat .

Az út az lenne, hogy két oszlop mindkét típus int, az egyik ezek közül az index és a többi évben. Mondjuk, oszlopokat idés yeara kérése válna

   SELECT `id`, `year` FROM Files_master ORDER BY `id` ASC, `year` ASC

Figyeljük meg, hogy milyen sorrendben listázza oszlopokat a ORDER BYnyilatkozat függ az elsődleges és másodlagos rend oszlop, így talán először szeretné megrendelni évre.

Ha nagyon, nagyon, meg kell használni ezt a formátumot, és csak akkor, akkor talán megtalálja a módját, hogy SUBSTRING_INDEXossza fel a húr, majd valami hasonló (nem tesztelt):

    SELECT SUBSTRING_INDEX(`AstNum`, '/', 1) AS `id`, 
           SUBSTRING_INDEX(`AstNum`, '/', -1) AS `year` 
    ORDER BY `id` ASC,`year` ASC

Megjegyzendő, hogy ez valószínűleg nem lesz elég lassú, hogy értékelje.


Edit: Válaszul a megjegyzést, mert kiderül, hogy az SQL Server helyett a MySQL (amit feltételezett időpontjában írásban) a parancs, hogy kissé más, bonyolultabb (még nem tesztelt, mélyedések lehet .. off ):

    SELECT SUBSTRING(AstNum, 1, LEN(AstNum)-5) AS id, 
           SUBSTRING(AstNum, LEN(AstNum)-3, 4) AS year 
    ORDER BY id ASC, year ASC
Válaszolt 20/01/2016 07:48
a forrás felhasználó

szavazat
0

Ha meg kell rendezni az év első -

SELECT AstNum
FROM Files_master
ORDER BY Cast(substring(AstNum, charindex('/', AstNum)+1, 4) as int) ASC,
         Cast(substring(AstNum, 1, charindex('/', AstNum)-1) as int) ASC 

Ha meg kell rendezni csak növekmény száma bölcs then-

SELECT AstNum
FROM Files_master
ORDER BY Cast(substring(AstNum, 1, charindex('/', AstNum)-1) as int) ASC
Válaszolt 20/01/2016 09:19
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more