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

इसकी शुरुआत और समाप्ति तिथियों के आधार पर दिन के अंतराल सहित कई बार रिकॉर्ड कैसे प्रदर्शित करें

SQL सर्वर में यह आसान है क्योंकि आप एक पुनरावर्ती CTE का उपयोग कर सकते हैं। (वास्तव में, आपके पास ये Oracle 12C में भी हैं, इसलिए वही तरीका काम करता है।)

with CTE as (
      select event, startdate, enddate,
             dateadd(day, 1 - day(startdate), startdate) as month_start
      from t
      union all
      select event, startdate, enddate,
             dateadd(month, 1, month_start)
      from cte
      while month_start <= enddate
    )
select event, month_start,
       ((case when eomonth(enddate) = eomonth(month_start) -- last month
              then day(enddate)
              else day(eomonth(month_start))
         end) -
        (case when month_start < startdate  -- first month
              then day(startdate) - 1
              else 0
         end)
       ) as days_in_month
from cte;

यह हर इवेंट के लिए तारीख की सीमा को महीने दर महीने बढ़ाता है. इसके बाद यह महीने में दिनों की संख्या की गणना करता है।

डिफ़ॉल्ट रूप से, यह 100 महीने तक काम करेगा। आप maxrecursion . का उपयोग कर सकते हैं विकल्प अगर आपको और महीनों के लिए समर्थन की आवश्यकता है।




  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 सर्वर त्रुटि - वर्तमान आदेश पर एक गंभीर त्रुटि उत्पन्न हुई

  2. SQL सर्वर:समान कॉलम प्रदर्शन के लिए एकाधिक अनुक्रमणिका

  3. varchar से int . तक की संख्या वाले कॉलम का प्रकार बदलें

  4. Oracle को SKIP LOCKED के साथ TOP N पंक्तियों को वापस करने के लिए बाध्य करें

  5. एसक्यूएल इनर जॉइन के साथ हटाएं