Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > ขอวิธีคิดหน่อยครับ ใครรุ้ช่วยแนะนำหน่อยครับว่า การคิดเดือน จากวัน เวลา ทำงาน ของ sql server ว่าคำนวนยังไงครับ พอดีผมใช้ datediff แล้วไม่ตรงครับ



 

ขอวิธีคิดหน่อยครับ ใครรุ้ช่วยแนะนำหน่อยครับว่า การคิดเดือน จากวัน เวลา ทำงาน ของ sql server ว่าคำนวนยังไงครับ พอดีผมใช้ datediff แล้วไม่ตรงครับ

 



Topic : 127934



โพสกระทู้ ( 130 )
บทความ ( 0 )



สถานะออฟไลน์




Code ครับ

@begin_date = '2007-08-28';
@end_date = '2013-06-07'
if ( @end_date IS NULL OR @end_date = '' )
begin
set @my_return = DATEDIFF( MM, @begin_date, GETDATE() ) % 12
end
else
begin
set @my_return = DATEDIFF( MM, @begin_date, @end_date ) % 12
end



Tag : .NET, Ms SQL Server 2005, Ms SQL Server 2008, Ms SQL Server 2012, Ms SQL Server 2014, Ms SQL Server 2016







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2017-06-09 12:52:38 By : txais View : 2250 Reply : 8
 

 

No. 1

Guest


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 : หน้าอี
 


 

No. 2



โพสกระทู้ ( 130 )
บทความ ( 0 )



สถานะออฟไลน์


งง ครับ อธิบายหน่อยครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-06-09 13:34:07 By : txais
 

 

No. 3

Guest


Quote:
การคิดเดือน จากวัน เวลา ทำงาน ของ sql server ว่าคำนวนยังไงครับ

--- คุณลองอธิบายความต้องการของคุณให้ สุนัข/แมว ที่คุณเลี้ยงเอาไว้ที่บ้านให้มันเข้าใจ (กรอบคำตอบ ได้/ไม่ได้)
...
...
...


การนับวัน/การนับเดือน/การนับปี/การนับอื้นฯ
--- หาจาก Google ด้วยคำค้น Ageing Calculate


ปล. "ขอวิธีคิดหน่อยครับ"
--- จริงฯแล้วสิ่งที่คุณต้องการมันอยู่ในหลักสูตร อนุบาล/ประถม
------ หนึ่งวันมีกี่สัปดาห์, หนึ่งเดือนมีกี่วัน, วันนี้เป็นวันอะไร
------ Dog, Cat, Bird, ...
------ Sunday, Monday, Tuesday, ...



คุณหลงลืมและให้ความสำคัญกับมันน้อยเกินไปต่างหากเล่า

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-06-09 14:14:42 By : หน้าฮี
 


 

No. 4

Guest


จาก #NO3 จริงฯแล้วมันประยุกต์ใช้กับกระทู้ที่ #127932 ได้ด้วย(ตรงฯไม่มีอ้อมค้อมด้วยซ้ำไป)

เพียงแต่ว่าพวกคุณมองออกหรือไม่?
--- ผมมองออกเป็นเพราะว่า ไอคิวของผมมีน้อย
...
...
...
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-06-09 14:27:16 By : หน้าฮี
 


 

No. 5

Guest


ผมไม่ได้ตั้งใจจะว่าพวกคุณนะ แต่ผมเปรียบเปรยให้ฟัง (Advance Algorithm)

คนมีใบขับขี่ VS คนไม่มีใบขับขึ่

--- มีรถแล้วขับไม่เป็น นับว่าแย่สุดฯแล้วนะ
------ อย่างน้อยฯคิดในแง่ดี บ้านมันมีสตางค์ว่ะเฮ้ย

--- ไม่มีรถแล้วยังขับไม่เป็น นับว่ายอดแย่สุดฯ
------ อย่างน้อยฯคิดในแง่ดี มันเป็นคนดีวะเฮ้ย


...
...
...

+55555 (ผมคิดอะไรไปเรื่อยเปือย +-*/)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-06-09 14:41:59 By : หน้าฮี
 


 

No. 6

Guest


Quote:
ขอวิธีคิดหน่อยครับ


เมื่อคุณขอมาผมก็ให้แนวคิดได้ดังนี้
1. เห็นแก่ตัว (แน่นอนว่าคุณและพวกของคุณอยู่ในประเภทนี้)
2. ตัวเห็นแก่ (ไก่เห็นนมงูหมูเห็นนมสาวหนูหนาวเห็นหมี แน่นอนว่าผมอยู่ในประเภทนี้)

ยกตัวอย่าง 1.
Quote:
Code ครับ
@begin_date = '2007-08-28';
@end_date = '2013-06-07'
if ( @end_date IS NULL OR @end_date = '' )
begin
set @my_return = DATEDIFF( MM, @begin_date, GETDATE() ) % 12
end
else
begin
set @my_return = DATEDIFF( MM, @begin_date, @end_date ) % 12
end


ยกตัวอย่าง 2.
Quote:
DECLARE @begin_date date = '2007-08-28';
DECLARE @end_date date = '2013-06-07'
DECLARE @my_return int;
if ( @end_date IS NULL OR @end_date = '' )
begin
set @my_return = DATEDIFF( MM, @begin_date, GETDATE() ) % 12
end
else
begin
set @my_return = DATEDIFF( MM, @begin_date, @end_date ) %12
end
SELECT @my_return


เผื่อจะมีประโยชน์สำหรับคนที่ผ่านไปผ่านมาบ้าง

SQL Server
Code (SQL)
SELECT 13 % 12  -- ผลลัพธ์ 1
SELECT 12 % 12  -- ผลลัพธ์ 0
SELECT 11 % 12  -- ผลลัพธ์ 11
-- % คือผลลัพธ์ที่ได้จากเศษการหารที่ลงตัว



ปล. คนบางคน(ส่วนน้อย) เกิดมาเพื่อคนอื่น แต่คนส่วนใหญ่เกิดมาเพื่อตัวเองทั้งนั้นแหละ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-06-11 12:51:28 By : หน้าฮี
 


 

No. 7

Guest


จาก #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. 8

Guest


แถมให้อีก จาก #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 : หน้าฮี
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ขอวิธีคิดหน่อยครับ ใครรุ้ช่วยแนะนำหน่อยครับว่า การคิดเดือน จากวัน เวลา ทำงาน ของ sql server ว่าคำนวนยังไงครับ พอดีผมใช้ datediff แล้วไม่ตรงครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่