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

रेल 3.1:एक समय सीमा के भीतर रिकॉर्ड के लिए पोस्टग्रेज को क्वेरी करना

जब आप to_date . पर कॉल करते हैं, तो आप अपने समय क्षेत्र का ट्रैक खो रहे होते हैं तो ऐसा न करें:

@today    = Time.now.in_time_zone(@person.time_zone).midnight.utc
@tomorrow = @today + 1.day

जब आप some_date.to_datetime , आपको डेटटाइम इंस्टेंस मिलता है जो यूटीसी में होता है इसलिए कुछ इस तरह का परिणाम होता है:

Time.now.in_time_zone(@person.time_zone).midnight.to_date.to_datetime

00:00:00 का समय-समय पर और UTC का एक समय क्षेत्र होगा; @person.time_zone . में 00:00:00 दिन का सही समय है लेकिन यूटीसी के लिए सही नहीं है (जब तक कि, निश्चित रूप से, @person +0 समय क्षेत्र में है)।

और आप overlaps . के साथ अपनी क्वेरी को आसान बना सकते हैं :

where(
    '(start_time, end_time) overlaps (timestamp :today, timestamp :tomorrow)',
    :today => @today, :tomorrow => @tomorrow
)

ध्यान दें कि overlaps आधे खुले अंतराल के साथ काम करता है:

<ब्लॉकक्वॉट>

प्रत्येक समय अवधि को आधे खुले अंतराल का प्रतिनिधित्व करने के लिए माना जाता है start <= time < end , जब तक कि प्रारंभ और अंत बराबर न हों, उस स्थिति में यह उस एकल समय को तत्काल दर्शाता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:पूर्ण पाठ खोज - आंशिक शब्दों की खोज कैसे करें?

  2. PostgreSQL में लघु माह का नाम प्राप्त करें

  3. पीजी मणि स्थापित करने का प्रयास करते समय 'libpq-fe.h शीर्षलेख नहीं मिल रहा है

  4. Laravel:त्रुटि [PDOException]:PostgreSQL में ड्राइवर नहीं ढूँढ सका

  5. प्रोग्रामेटिक रूप से पोस्टग्रेज JDBC के लिए एक `डेटासोर्स` ऑब्जेक्ट तैयार करें