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

दोहरी तालिका से एसक्यूएल दिनांक और समय की तुलना

ठीक है, मुझे लगता है कि मैं तुम्हें मिल गया हूँ। आप निम्न कार्य करना चाहते हैं?

select <columns>
  from my_table
 where state_date <= <some date>
   and state_time <= <some time>

मिलीसेकंड के बारे में परवाह करना काफी असामान्य है लेकिन यदि आप ऐसा करते हैं तो आपको systimestamp का उपयोग करना चाहिए ।

इस तथ्य को देखते हुए कि आपने दिनांक और समय को विभाजित किया है, ये वर्ण हैं, इसलिए, मुझे मास्क प्रारूपित करें . यदि वे गलत हैं तो लिंक आपको मार्गदर्शन करेगा कि क्या करना है। वैसे, किसी तारीख को इस तरह विभाजित करना बुद्धिमानी नहीं है। आप timestamp . का उपयोग करके एक कॉलम बना सकते हैं आपकी तालिका में डेटा-प्रकार, जो आपकी समस्या को बेहद सरल बना देगा।

इसलिए, मुझे नहीं पता कि आपने 'Day' क्यों चुना है आपकी क्वेरी के लिए प्रारूप लेकिन उसके साथ जा रहा है <some date> हो जाता है to_char(sysdate, 'DAY')

नीचे आपकी टिप्पणी से <some date> होगा to_char(sysdate, 'DD-MON-YY')

<some time> to_char(systimestamp,'HH24:MI:SS:FF3') होगा , जो आपको मिलीसेकंड का टाइमस्टैम्प देगा, हालांकि डेटाटाइप माइक्रो-सेकंड में जा सकता है।

यह मुझे थोड़ा अजीब लगता है लेकिन फिर आपकी क्वेरी बन जाएगी:

select <columns>
  from my_table
 where state_date <= to_char(sysdate, 'DD-MON-YY')
   and state_time <= to_char(systimestamp,'HH24:MI:SS:FF3')

यह अधिक सामान्य होगा, यदि किसी तिथि को स्ट्रिंग के रूप में संग्रहीत किया जाता है, तो इसे yyyymmdd प्रारूप में संग्रहीत करना अधिक सामान्य होगा। तो कम से कम आप गारंटी दे सकते हैं कि यह क्रम में है। अगर आपने ऐसा कुछ किया है तो बस फॉर्मेट मास्क बदल दें। यदि आपने ऐसा नहीं किया है तो ये प्रश्न अपेक्षानुसार काम नहीं करने वाले हैं।

व्यक्तिगत रूप से, यदि आपके पास है इस तरह से डेटा स्टोर करने के लिए और state_date . मानकर के रूप में संग्रहीत है, कहते हैं, dd-mon-yy , यानी साल, महीने और दिन, और state_time . सहित ऊपर बताए अनुसार संग्रहीत किया जाता है, तो मैं ऐसा कुछ करूंगा:

select <columns>
  from my_table
 where to_timestamp(state_date || state_time, 'DD-MON-YYHH24:MI:SS:FF3')
        <= systimestamp

यह बहुत अधिक स्पष्ट करता है कि क्या हो रहा है और क्या < . पर कोई अस्पष्टता नहीं है इसका मतलब है कि इस स्थिति में एक तारीख हमेशा भविष्य की तारीख से कम होगी, जो जरूरी नहीं कि स्ट्रिंग्स के लिए सही हो।

मुझे आशा है कि यह समझ में आता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle तालिका 2 में सम्मिलित करें, फिर तालिका 1 से हटाएं, विफल होने पर अपवाद

  2. Oracle DUP_VAL_ON_INDEX अपवाद को अनदेखा करना कितना बुरा है?

  3. SQL-डेटाबेस फ़ील्ड में खोजने योग्य Arrays संग्रहीत करना

  4. Oracle रेगेक्स के साथ समस्या

  5. डायनेमिक क्वेरी में v_MONTH के लिए अमान्य पहचानकर्ता त्रुटि