এক্সওয়াইজের মতো টিপিক্যাল সফটওয়্যার রিলিজের সংস্করণগুলি কীভাবে অর্ডার করবেন?


13

একটি "সফ্টওয়্যার রিলিজ" টেবিল দেওয়া হয়েছে:

| id | version |
|  1 | 0.9     |
|  2 | 1.0     |
|  3 | 0.9.1   |
|  4 | 1.1     |
|  5 | 0.9.9   |
|  6 | 0.9.10  |

আমি কীভাবে এই আউটপুট উত্পাদন করতে পারি?

| id | version |
|  1 | 0.9     |
|  3 | 0.9.1   |
|  5 | 0.9.9   |
|  6 | 0.9.10  |
|  2 | 1.0     |
|  4 | 1.1     |

উত্তর:


22

আপনার পছন্দসই আউটপুট উত্পাদন করতে, আপনি কেবল:

SELECT id, version
FROM   versions
ORDER  BY string_to_array(version, '.')::int[];

textযে কোনও একটি integerঅ্যারেতে পুরো অ্যারে নিক্ষেপ করতে পারে ( 9পূর্বে সাজানোর জন্য 10)।
এক ORDER BYধরণের অ্যারে করতে পারেন । এটি প্রতিটি উপাদান দ্বারা আদেশ হিসাবে একই। আর সংক্ষিপ্ত নেতৃস্থানীয় অংশের সাথে সংক্ষিপ্ত অ্যারেগুলি দীর্ঘতর আগে উপস্থিত হয়।

ডিবি <> ফিডল এখানে
পুরানো এসকিউএল ফিডল।


1
এটা অসাধারণ. কোনওভাবে, নালগুলির ক্রম নির্দিষ্ট করে না দিয়ে এই সঠিকভাবে অনুপস্থিত মানগুলি: (1.6.9 -> 1.7.1 -> 1.7) এর পরিবর্তে (1.6.9 -> 1.7 -> 1.7.1)। এই এক গ্রহণ।
ক্রিস বেটি

2
আপনি যদি ম্যাভেন সংস্করণ বা সংস্করণগুলির সাথে ডিল করছেন যেগুলিতে অ-সংখ্যাসূচক অক্ষর থাকতে পারে তবে আপনি প্রথমে অ-সংখ্যাসূচক অক্ষরগুলি সরিয়ে ফেলতে পারেন:string_to_array(regexp_replace(version, '[^0-9.]', '', 'g'), '.')::int[]
স্যামুয়েল

আমি এটি সর্বাধিক সংস্করণটি খুঁজে পেতে ব্যবহার করি এবং এটি দুর্দান্ত কাজ করেSELECT max(string_to_array(build_version, '.')::int[]
জোভিয়ানো ডায়াস

6
select id,
       name, 
       v[1] as major_version,
       v[2] as minor_version,
       v[3] as patch_level
from (
   select id, 
          name, 
          string_to_array(version, '.') as v
   from versions
) t
order by v[1]::int desc, v[2]::int desc, v[3]::int desc;

এসকিউএলফিডাল: http://sqlfiddle.com/#!15/c9acb/1

আপনি যদি সংস্করণ স্ট্রিংয়ে আরও উপাদান প্রত্যাশা করেন তবে কেবল আরও অ্যারে সূচকগুলি ব্যবহার করুন। যদি সূচকের অস্তিত্ব না থাকে তবে ফলাফলটি শূন্য v[10]হবে (উদাহরণস্বরূপ ফিরে আসবে null)


এগুলি কি সংখ্যায় রূপান্তর করতে হবে? তা না হলে আমি আশা 10মধ্যে হতে 1এবং 2
জেএনকে

এটি আপনার ফিডল দ্বারা নিশ্চিত করা হয়েছে ...
জেএনকে

আমার পক্ষে এই পক্ষে মোছা। স্ট্রিং_ট_আরে রেজেসের চেয়ে অনেক সহজ।
ক্রিস বেটি

@ জেএনকে: এটাই হচ্ছে v[1]::int। এটি একটি পূর্ণসংখ্যার উপর স্ট্রিং কাস্ট করে।
a_horse_with_no_name

আপনার এসকিউএল-এ কেবলমাত্র পরিবর্তনটি হ'ল আদেশটি। আমি ডেস্কের বাইরে বেরোনোর ​​পরামর্শ দিচ্ছি এবং এটি ফলাফল নির্ধারণ করবে @ ক্রিস বেটি যে সন্ধান করছে।
সূর্যের

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.