PDA

View Full Version : سوال: مرتب کردن اعدا در یک فیلد غیر عددی



Open-Source
یک شنبه 16 اسفند 1388, 23:32 عصر
سلام.

من یه ستون دارم که از جنس varchar هستش و فقط عدد میگیره.
حال میخوام این ستون رو مانند یک ستون عددی مرتب کنم(آخه اینجوری عدد 2 رو بزرگتر از 10 در نظر میگیره و...)

و میخوام max این ستون رو بدست بیارم.

؟:متفکر:

محمد سلیم آبادی
دوشنبه 17 اسفند 1388, 00:08 صبح
SELECT TOP 1 * FROM table_name ORDER BY column_name + 0 DESC

SELECT TOP 1 * FROM table_name ORDER BY LEN(column_name), column_name DESC

SELECT TOP 1 * FROM table_name ORDER BY CAST(column_name AS INT) DESC

Open-Source
دوشنبه 17 اسفند 1388, 09:14 صبح
SELECT TOP 1 * FROM table_name ORDER BY column_name + 0 DESC

SELECT TOP 1 * FROM table_name ORDER BY LEN(column_name), column_name DESC

SELECT TOP 1 * FROM table_name ORDER BY CAST(column_name AS INT) DESC

من از روش سوم بیشتر خوشم اومد.
راستی کار این CAST چی هستش؟

محمد سلیم آبادی
دوشنبه 17 اسفند 1388, 09:18 صبح
خط مربوط به ORDER BY کوئری دوم بایستی به این تغییر کنه:
SELECT TOP 1 * FROM table_name ORDER BY LEN(column_name) DESC, column_name DESC

CAST کار تبدیل نوع دیتا را انجام میده (دقیقا کار تابع Convery)

اگر فقط عدد در ستون ذخیره میشه میتونید با جمع کردن با عدد صفر کار تبدیل رو به سادگی انجام بدین.

Open-Source
دوشنبه 17 اسفند 1388, 11:05 صبح
کار CAST رو فهمیدم.
من از روش سوم استفاده کردم.
انتخاب خودت از بین این سه روش چیه؟
فرقی هم با هم دارند؟
مثلا از لحاظ سرعت؟

محمد سلیم آبادی
دوشنبه 17 اسفند 1388, 11:45 صبح
من ترجیه میدم ستون مورد نظر رو از نوع integer انتخاب کنم تا نیاز به تبدیل نباشه.
روشهایی که گفتم فرق چندانی باهم ندارن در همشون تبدیل یا استفاده تابع وجود داره.