PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

टाइमस्टैम्प (भविष्य सहित) को अभी से पूर्ण दूरी के अनुसार क्रमबद्ध करें

now() या CURRENT_TIMESTAMP इस उद्देश्य के लिए।

आपके प्रश्नों के भिन्न परिणामों का कारण यह है:

जब आप date . प्रकार के दो मान घटाते हैं , परिणाम एक integer है और abs() लागू होता है।
जब आप timestamp . प्रकार के दो मानों को घटाते हैं (या सिर्फ एक timestamp है ), परिणाम एक interval . है , और abs() उपयुक्त नहीं है। आप CASE . के साथ स्थानापन्न कर सकते हैं अभिव्यक्ति:

ORDER BY CASE WHEN expiry > now() THEN expiry - now() ELSE now() - expiry END

या आप extract() यूनिक्स epoch परिणामी interval . से जैसे @ क्रेग ने पहले ही प्रदर्शन कर दिया है। मैं उद्धृत करता हूं:"अंतराल मानों के लिए, अंतराल में सेकंड की कुल संख्या"। फिर आप abs() . का उपयोग कर सकते हैं फिर से:

ORDER BY abs(extract(epoch from (expiry - now())));

age() बड़े अंतराल के लिए दिनों को महीनों और वर्षों में जोड़कर अंतराल में अधिक मानवीय पठनीय प्रतिनिधित्व जोड़ देगा। लेकिन यह बिंदु के बगल में है:मान का उपयोग केवल छँटाई के लिए किया जाता है।

चूंकि आपका कॉलम टाइमस्टैम्प प्रकार का है, इसलिए आपको CURRENT_TIMESTAMP . का उपयोग करना चाहिए (या now() ) CURRENT_DATE . के बजाय , या आपको गलत परिणाम मिलेंगे (या "आज" के लिए भी गलत)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ActiveRecord और Postgresql के साथ प्रगणित प्रकार

  2. डायनामिक कॉलम नामों में SQL इंजेक्शन को रोकें

  3. PostgreSQL, न्यूनतम और अधिकतम तिथियों के बीच पंक्तियों की संख्या

  4. एज़ूर कंटेनर इंस्टेंस पर पोस्टग्रेस डेटाबेस तैनात करना?

  5. अलग-अलग अस्थिरता वाले कार्यों के लिए योजनाकार अलग-अलग परिणामों के साथ क्यों आ रहा है?