|  | 
	                
  
    |  |  
    | 
        
        ขอวิธีคิดหน่อยครับ ใครรุ้ช่วยแนะนำหน่อยครับว่า การคิดเดือน จากวัน เวลา ทำงาน ของ sql server ว่าคำนวนยังไงครับ พอดีผมใช้ datediff  แล้วไม่ตรงครับ     |  
    |  |  
 
              
  
    | 
 
        
          |  |  |  |  |  
          |  |  | 
            
              | Code (SQL) 
 
IF OBJECT_ID('tempdb..#Fuck') IS NOT NULL DROP TABLE #Fuck;
DECLARE @month TINYINT = MONTH(GETDATE()); -- เดือนปัจจูบัน
DECLARE @Cols NVARCHAR(MAX);
DECLARE @query  AS NVARCHAR(MAX)
;WITH CTE_Days AS
(
SELECT DATEADD(month, @month, DATEADD(month, -MONTH(GETDATE()), DATEADD(day, -DAY(GETDATE()) + 1, CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)))) D, 1 AS RN, 0.0 AS Amt
UNION ALL
SELECT DATEADD(day, 1, D), RN + 1, 0.0
FROM CTE_Days
WHERE D < DATEADD(day, -1, DATEADD(month, 1, DATEADD(month, @month, DATEADD(month, -MONTH(GETDATE()), DATEADD(day, -DAY(GETDATE()) + 1, CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME))))))
)
SELECT * INTO #Fuck FROM CTE_Days
select @Cols =  STUFF((SELECT (',' + QuoteName(RN))
                FROM #Fuck Mom 
                GROUP BY Mom.RN
                ORDER BY Mom.RN ASC --Fixed 1, 10, 11, 12, ...
         FOR XML PATH(''), TYPE
         ).value('.', 'NVARCHAR(MAX)')
     ,1,1,'')
                              
SET @query = 'SELECT RN,' + @cols + ' from 
             (
                select RN, DAY(D) AS D, Amt
                from #Fuck ' +  '
            ) src
            pivot 
            (
                sum(Amt)
                for [D] in (' + @cols + ')
            ) piv '
EXECUTE(@query);
IF OBJECT_ID('tempdb..#Fuck') IS NOT NULL DROP TABLE #Fuck;
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2017-06-09 13:16:22 | By :
                            หน้าอี |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | งง ครับ อธิบายหน่อยครับ 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2017-06-09 13:34:07 | By :
                            txais |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
 
        
          |  |  |  |  |  
          |  |  | 
            
              | จาก #NO3 จริงฯแล้วมันประยุกต์ใช้กับกระทู้ที่ #127932 ได้ด้วย(ตรงฯไม่มีอ้อมค้อมด้วยซ้ำไป) 
 เพียงแต่ว่าพวกคุณมองออกหรือไม่?
 --- ผมมองออกเป็นเพราะว่า ไอคิวของผมมีน้อย
 ...
 ...
 ...
 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2017-06-09 14:27:16 | By :
                            หน้าฮี |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | ผมไม่ได้ตั้งใจจะว่าพวกคุณนะ แต่ผมเปรียบเปรยให้ฟัง (Advance Algorithm) 
 คนมีใบขับขี่ VS คนไม่มีใบขับขึ่
 
 --- มีรถแล้วขับไม่เป็น นับว่าแย่สุดฯแล้วนะ
 ------ อย่างน้อยฯคิดในแง่ดี บ้านมันมีสตางค์ว่ะเฮ้ย
 
 --- ไม่มีรถแล้วยังขับไม่เป็น นับว่ายอดแย่สุดฯ
 ------ อย่างน้อยฯคิดในแง่ดี มันเป็นคนดีวะเฮ้ย
 
 
 ...
 ...
 ...
 
 +55555 (ผมคิดอะไรไปเรื่อยเปือย +-*/)
 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2017-06-09 14:41:59 | By :
                            หน้าฮี |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
 
        
          |  |  |  |  |  
          |  |  | 
            
              | จาก #NO 6 --- โปรแกรมเมอร์ 10, 100, 1,000 คน คิดเลขเร็ว/ถูกต้อง สู้แม่ค้าตลาดสดไม่ได้แม้แต่คนเดียว
 (เลือกคนไหนมาก็ได้ถ้าไม่เชื่อ)
 
 
  Quote: DATEDIFF( MM, @begin_date, @end_date)
 --- ฟังก์ชั่น DATEDIFF(MM, , @begin_date, @end_date)
 ------ หาจำนวนเดือน ทั้งหมดจากวันที่-วันที่ (จากตัวอย่างได้ 70 เดือน)
 
 ถ้าจะหาว่ามีกี่ปี
 Code (SQL)
 
 
-- ปัดลงให้เป็นจำนวนเต็ม(0, 1, 2, 3, ...)
SELECT FLOOR(DATEDIFF(MM, , @begin_date, @end_date) / 12)
-- ได้ 5 ปี
 
 ถ้าจะหาว่ามีกี่เดือน
 Code (SQL)
 
 
SELECT DATEDIFF(MM, , @begin_date, @end_date) % 12
-- ได้ 10 เดือน
 
 
 สรุปว่า จากวันที่  '2007-08-28' - '2013-06-07'
 คำนวณได้ 5 ปี 10 เดือน
 
 
 ปล. ในสถานะการณ์จริง บางเงื่อนไข(บางความต้องการ) มันมีมากกว่านี้
 ทั้งนี้ทั้งนั้น ขึ้นอยู่กับการพลิกแพลง (มีกึ๋นเป็นกรณีฯไป)
 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2017-06-11 13:11:38 | By :
                            หน้าฮี |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | แถมให้อีก จาก #NO 6 - #NO 7 --- สังเกตุว่ามันจะหายไปวันหนึ่ง ยกตัวอย่างเช่น จากวันที่ 1- ถึงวันที่ 2  = 1 วัน
 ------ สาเหตุมันเป็นเพราะ ความละเอียด/กึ๋น ไม่เพียงพอ "ใช้วันที่ 2007-08-28" (ขาด Offset Day)
 ------ Offset สิ้นวันประมาณว่า 2007-08-28 23:59:59:999
 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2017-06-11 13:18:42 | By :
                            หน้าฮี |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  |  |