مرتب کردن اعدادی که با نوع varchar در جدول ذخیره شده اند
  برخی از کاربران مقادیر عددی خود را با نوع varchar در جدول ذخیره می کنند و هنگام بازیبانی انتظار دارند که به شکل عدد sort صورت گیرد.
   SQL Server
   ۷۰۴۹
   این مقاله حاوی فایل ضمیمه نمی باشد
   محمد سلیم آبادی
   ۱۳۸۸/۱۲/۱۹
ارسال لینک صفحه برای دوستان ارسال لینک صفحه برای دوستان  اضافه کردن به علاقه مندیها اضافه کردن به علاقه مندیها   نسخه قابل چاپ نسخه قابل چاپ

 

گاهی اوقات کاربران اعداد را به شکل رشته در جداول ذخیره می کنند. و هنگام نمایش انتظار می رود که به شکل اعداد مرتب نمایش داده شوند. بطور مثال اگر مقادیر 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');