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

SQL, दिनांक/समय के बीच चयन

सबसे पहले, Group का उपयोग न करें कॉलम नाम के रूप में। यह प्रत्येक SQL मानक में एक आरक्षित शब्द है। मैंने इसका नाम बदलकर grp कर दिया है मेरे उत्तर के उद्देश्य से।

'2012-06-01 08:00' . से एक नई शिफ़्ट शेड्यूल करने का प्रयास किया जा रहा है करने के लिए '2012-06-03 08:00' ...

INSERT INTO tbl (prim, grp, startdate, enddate)
SELECT 1, 10, '2012-06-01 08:00', '2012-06-03 08:00'
WHERE  NOT EXISTS (
    SELECT *
    FROM   tbl
    WHERE  prim = 1
    AND    grp = 10
    AND   '2012-06-03 08:00' > startdate -- not >= to allow sharing a border
    AND   '2012-06-01 08:00' < enddate   -- and not BETWEEN ... AND either
    )

ध्यान दें कि मैं तुलना करता हूं:

new_end   &gt old_start
new_start &lt old_end

यदि आप BETWEEN .. AND .. . का उपयोग करते हैं आप अपने परीक्षण में एक पाली की सीमाओं को शामिल करते हैं। यह >= . का उपयोग करने जैसा ही है और <= . आपको > . का उपयोग करने की आवश्यकता है और < सीमाओं को ओवरलैप करने की अनुमति देने के लिए।

खैर, और मेरे बड़े पैमाने पर सरलीकृत वाक्यविन्यास को आजमाएं। मूल रूप से आपके पास क्या था इसके बारे में निश्चित नहीं है।
यहाँ एक sqlfiddle पर कार्यशील डेमो है। कॉम साथ खेलने के लिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर - INSERT के बाद वापसी मूल्य

  2. जहां कॉमा सीमांकित मान वाले कॉलम में मान

  3. दूरस्थ सर्वर से अरबों पंक्तियों को पुनः प्राप्त करना?

  4. SQL सर्वर (T-SQL) में PATINDEX () फ़ंक्शन कैसे काम करता है

  5. पावर () SQL सर्वर में उदाहरण