گاهی اوقات کاربران اعداد را به شکل رشته در جداول
ذخیره می کنند. و هنگام نمایش انتظار می رود که به شکل اعداد مرتب نمایش داده شوند.
بطور مثال اگر مقادیر 6 و 19 از نوع رشته باشند مقدار 6 بزگتر از 19 است ولی اگر از
نوع عدد باشند 19 بزرگتر از 6 است. در اینجا به تعدادی روش برای حل این مساله
پرداخته می شود:
DECLARE @t TABLE (Data
varchar(15));
insert into @t
select '6134' union all
select '144' union all
select '7345' union all
select '109812' union all
select '100074' union all
select '1290' union all
select '45764';
روش اول:
مقادیر ستون مورد نظر را تبدیل به INTEGER کنیم (با کمک
توابع تبدیل CAST یا CONVERT)
SELECT data
FROM @t
ORDER BY CAST(data AS INT);
--ORDER BY CONVERT(INT, data)
/*
data
---------------
144
1290
6134
7345
45764
100074
109812
*/
روش دوم:
مقدار مورد نظر را با 0 جمع کرده. با این کار رشته خود به خود تبدیل به عدد خواهد
شد.
SELECT data
FROM @t
ORDER BY Data + 0;
روش سوم:
با بدست آوردن طول رشته و ترکیب آن با خود رشته می توانیم به ارش عدد پی ببریم.
SELECT data
FROM @t
ORDER BY LEN(data) + Data;
--ORDER BY LEN(data), Data
روش چهارم:
شیفت دادن رشته ها به راست و پر کردن فضای خالی با کاراکتر صفر
SELECT data
FROM @t
ORDER BY REPLACE(STR(data),
' ', '0');