XYZ जैसे विशिष्ट सॉफ़्टवेयर रिलीज़ संस्करणों से ORDER कैसे करें?


13

"SoftwareReleases" तालिका को देखते हुए:

| 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प्रकार के सरणी कर सकते हैं। यह प्रत्येक तत्वों द्वारा आदेश देने के समान है। और छोटे सरणियाँ समान अग्रणी भाग के साथ लंबे समय से पहले आती हैं।

db <> यहाँ
field पुरानी SQL फ़ेल्ड।


1
यह भी खूब रही। किसी तरह, यह मानों को सही ढंग से गायब करता है, नल के आदेश को निर्दिष्ट किए बिना: (1.6.9 -> 1.7 -> 1.7.1), बजाय (1.6.9 -> 1.7.1 -> 1.7)। यह स्वीकार करना।
क्रिस बेट्टी

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;

SQLFiddle: http://sqlfiddle.com/# -15 / c9acb /1

यदि आप संस्करण स्ट्रिंग में अधिक तत्वों की अपेक्षा करते हैं, तो बस अधिक सरणी अनुक्रमित का उपयोग करें। यदि सूचकांक मौजूद नहीं है, तो परिणाम शून्य v[10]होगा (जैसे वापस आ जाएगा null)


क्या आपको इन्हें संख्याओं में बदलने की आवश्यकता है? वरना मुझे उम्मीद 10है कि मैं इसके बीच 1रहूंगा 2
JNK

इस बात की पुष्टि आपके फिडेल ने की ...
JNK

इसके पक्ष में खान को हटाना। string_to_array regex की तुलना में बहुत सरल है।
क्रिस बेट्टी

@ जेएनके: यही वह चीज v[1]::intहै जिसके बारे में है। यह स्ट्रिंग को एक पूर्णांक में रखता है।
a_horse_with_no_name

एकमात्र परिवर्तन जो मैं आपके SQL में करूंगा, वह है ऑर्डर। मेरा सुझाव है कि desc को बाहर निकालना और वह परिणाम सेट करेगा @ क्रिस बेट्टी की तलाश है।
सन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.