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 > PHP > PHP Forum > รบกวนช่วยดู SQL ให้หน่อยคะ แสดงผลไม่ถูกคะถ้าแทนด้วยฟิลด์ในตาราง ลองแทนค่าลงไปตรงผลกลับออกมาถูกคะ ทั้งๆที่เหมือนกันทุกอย่าง ต่างแค่ตรงที่แทนค่า



 

รบกวนช่วยดู SQL ให้หน่อยคะ แสดงผลไม่ถูกคะถ้าแทนด้วยฟิลด์ในตาราง ลองแทนค่าลงไปตรงผลกลับออกมาถูกคะ ทั้งๆที่เหมือนกันทุกอย่าง ต่างแค่ตรงที่แทนค่า

 



Topic : 090763



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



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




รบกวนช่วยดู SQL ให้หน่อยคะ
ค่าแสดงออกมาไม่ตรงคะ

Code
select personnel.personnel_id, personnel.reg_job, member.vacation_max ,DATEDIFF(year,(year(personnel.reg_job)),(year(GETDATE())+'543')) as years ,DATEDIFF(year,(year(2554-01-02)),(year(GETDATE())+'543')) as years1 ,month(CONVERT(VARCHAR(24),personnel.reg_job,105)) as monthStartJob from member,personnel where member.id_card=personnel.id_card and personnel.personnel_id = '5500987'


ผลออกมาเป็นแบบนี้คะ
pic3

ทั้งๆที่ค่า personnel.reg_job ก็เท่ากับ 2554-01-02 นะคะ
แต่ทำไมผลที่ออกมาถึงไม่ตรงกันคะ ซึ่งค่า years ต้องเท่ากับ 2 คะ

รบกวนด้วยคะ



Tag : PHP, Ms SQL Server 2005, Ms SQL Server 2008







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-02-12 16:20:41 By : Baitong_ch View : 2384 Reply : 21
 

 

No. 1



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



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


SQL ด้านบน พยายามแล้วก็ยังไม่เหมือนเดิมคะ

แต่ตอนนี้แก้ไขเป็นแบบนี้คะ สามารถใช้งานได้เหมือนกัน
Code
,(year(GETDATE())+'543') - (year(reg_job)) as years


ไว้คราวหน้าจะมารบกวนใหม่นะคะ :D

แต่ก็ยังอยากทราบนะคะ ว่า SQL ด้านบนผิดตรงไหน ทำไมค่าไม่ตรง -*-
ขอบคุณคะ








ประวัติการแก้ไข
2013-02-12 16:32:08
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-12 16:30:51 By : Baitong_ch
 


 

No. 2



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

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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


นึกว่าใครซะอีก ... สบายดีเหรอครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-12 16:40:20 By : sakuraei
 

 

No. 3



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

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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


ไล่ วงเล็บดูดีๆ ครับ มันมีที่ผิดอยู่นาาาา

แก้ให้แล้ว ลองเอาไปทดสอบดูหน่อยว่าผ่านมั๊ย
Quote:
select personnel.personnel_id, personnel.reg_job, member.vacation_max
,DATEDIFF(year(personnel.reg_job),( year(GETDATE())+'543') ) as years
,DATEDIFF(year(2554-01-02), ( year(GETDATE())+'543') ) as years1
,month(CONVERT(VARCHAR(24),personnel.reg_job,105)) as monthStartJob
from member,personnel
where member.id_card=personnel.id_card
and personnel.personnel_id = '5500987'

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-12 16:49:32 By : sakuraei
 


 

No. 4



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



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


ไม่ได้คะพี่
Code
Msg 174, Level 15, State 1, Line 2 The datediff function requires 3 argument(s).

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-12 16:53:07 By : Baitong_ch
 


 

No. 5



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

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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


แสดงว่าพี่เข้าใจ datediff ผิดไป เดี๋ยวดูให้ใหม่
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-12 16:54:28 By : sakuraei
 


 

No. 6



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

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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


ตอบความคิดเห็นที่ : 4 เขียนโดย : Baitong_ch เมื่อวันที่ 2013-02-12 16:53:07
รายละเอียดของการตอบ ::
ทำไม datediff ถึงใช้ 3 argument ล่ะ

Quote:
Syntax

DATEDIFF(date1,date2)

SELECT DATEDIFF('2008-11-30','2008-11-29') AS DiffDate


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-12 16:59:26 By : sakuraei
 


 

No. 7



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

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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


ใช้ฐานข้อมูลตัวไหนอยู่ Oracle หรอ??
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-12 17:01:20 By : sakuraei
 


 

No. 8



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



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


ก็แบบนี้ไม่ใช่หรอค่ะพี่
Code
DATEDIFF(datepart,startdate,enddate)


ตองดูจากเว็บนี้ http://www.w3schools.com/sql/func_datediff.asp
ฐานข้อมูล MS-SQL2008 ค่ะพี่
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-12 17:02:38 By : Baitong_ch
 


 

No. 9



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

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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


Quote:
งั้นก็แบบนี้

select personnel.personnel_id, personnel.reg_job, member.vacation_max
,DATEDIFF(yyyy, year(personnel.reg_job),( year(GETDATE())+'543') ) as years
,DATEDIFF(yyyy, year(2554-01-02), ( year(GETDATE())+'543') ) as years1
,month(CONVERT(VARCHAR(24),personnel.reg_job,105)) as monthStartJob
from member,personnel
where member.id_card=personnel.id_card
and personnel.personnel_id = '5500987'

ใช้ yyyy แทน year ก็ดีจะได้ไม่งง

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-12 17:05:38 By : sakuraei
 


 

No. 10



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



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


ก็ยังแสดงไม่ถูกอยู่ดีคะพี่

pic4
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-12 17:08:08 By : Baitong_ch
 


 

No. 11



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

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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


แต่พี่ชอบแบบนี้มากกว่า ,(year(GETDATE())+'543') - (year(reg_job)) as years ซึ่งน่าจะเร็วกว่าด้วย
เพราะไม่ต้องเรียกใช้ฟังก์ชั่นหลายตัว
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-12 17:08:30 By : sakuraei
 


 

No. 12



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



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


คะ ใช่แบบนี้ก็ได้ ^________^
Code
,(year(GETDATE())+'543') - (year(reg_job)) as years


ขอบคุณคะพี่ o_<"
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-12 17:11:33 By : Baitong_ch
 


 

No. 13



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

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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


ลองเอาอันนี้ไปทดสอบซิ

select datediff(yyyy , dateadd(year, 543 ,curdate( )) , '2554-01-02')

แต่ถ้าเป็น mysql จะใช้แบบนี้
select floor(datediff(date_add(curdate( ) ,interval 543 year) , '2554-01-02') / 365)


ประวัติการแก้ไข
2013-02-12 17:24:23
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-12 17:21:29 By : sakuraei
 


 

No. 14



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

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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


ท้ายที่สุดก็ลองอันนี้
Quote:
select personnel.personnel_id, personnel.reg_job, member.vacation_max
,DATEDIFF(yyyy , dateadd(year, 543 ,curdate( )) ,personnel.reg_job) as years
,DATEDIFF(yyyy , year(2554-01-02) , ( year(GETDATE())+'543') ) as years1
,month(CONVERT(VARCHAR(24),personnel.reg_job,105)) as monthStartJob
from member,personnel
where member.id_card=personnel.id_card
and personnel.personnel_id = '5500987'

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-12 17:30:25 By : sakuraei
 


 

No. 15



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



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


ตอบความคิดเห็นที่ : 14 เขียนโดย : sakuraei เมื่อวันที่ 2013-02-12 17:30:25
รายละเอียดของการตอบ ::
Code
Msg 195, Level 15, State 10, Line 2 'curdate' is not a recognized built-in function name.

ก็ยังคงไม่ได้เหมือนเดิมคะพี่...

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-13 09:38:12 By : Baitong_ch
 


 

No. 16



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

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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


ลองเปลี่ยน curdate() เป็น getdate() ดูครับ

select personnel.personnel_id, personnel.reg_job, member.vacation_max
,DATEDIFF(yyyy , dateadd(year, 543 ,GETDATE()) ,personnel.reg_job) as years
,DATEDIFF(yyyy , year(2554-01-02) , ( year(GETDATE())+'543') ) as years1
,month(CONVERT(VARCHAR(24),personnel.reg_job,105)) as monthStartJob
from member,personnel
where member.id_card=personnel.id_card
and personnel.personnel_id = '5500987'
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-13 09:46:19 By : sakuraei
 


 

No. 17



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



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


ตอบความคิดเห็นที่ : 16 เขียนโดย : sakuraei เมื่อวันที่ 2013-02-13 09:46:19
รายละเอียดของการตอบ ::
ได้แล้วคะพี่ ^^
pic1

สลับตำแหน่งกันนิดหน่อย ค่าไม่ติดลบแล้ว ใช้งานได้เลย
Code
select personnel.personnel_id, personnel.reg_job, member.vacation_max ,DATEDIFF(yyyy , personnel.reg_job , dateadd(year, 543 ,GETDATE()) ) as years ,DATEDIFF(yyyy , year(2554-01-02) , ( year(GETDATE())+'543') ) as years1 ,month(CONVERT(VARCHAR(24),personnel.reg_job,105)) as monthStartJob from member,personnel where member.id_card=personnel.id_card and personnel.personnel_id = '5500987'


ขอบคุณพี่มากๆๆๆๆคะ ^_____^

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-13 09:53:00 By : Baitong_ch
 


 

No. 18



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

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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



แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-13 09:54:40 By : sakuraei
 


 

No. 19



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



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


ตอบความคิดเห็นที่ : 16 เขียนโดย : sakuraei เมื่อวันที่ 2013-02-13 09:46:19
รายละเอียดของการตอบ ::
ทำไมพี่ใช้ dateadd หรอคะ
Code
dateadd(year, 543 ,GETDATE())


แล้วทำไมใช้แบบนี้ไม่ได้อะคะ
Code
(year(GETDATE())+'543')


สงสัย O_o???

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-13 09:55:37 By : Baitong_ch
 


 

No. 20



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

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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


เพราะ datediff ต้องใช้ parameter เป็น วันที่แบบเต็มครับ '2012-12-31' ครับ เอามาแต่ ปี ไม่ได้ '2012' '2554'

ลอง select dateadd(year, 543 ,GETDATE()) ดูครับ เราก็จะได้เป็นวันที่ปัจจุบันที่เป็นปีไทย
แล้วนำไปใส่ใน datediff(yyyy , personnel.reg_job , dateadd(year, 543 ,GETDATE()) )

สังเกตดูดีๆน่ะครับว่า personnel.reg_job มีค่าเป็นวันที่แบบเต็มรูป '2554-01-02' ส่วน dateadd(year, 543 ,GETDATE())
เป็น '2556-02-13' สรุปว่า

datediff(yyyy , personnel.reg_job , dateadd(year, 543 ,GETDATE()) )
มีค่าเท่ากับ datediff(yyyy , '2554-01-02' , '2556-02-13' )

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-13 10:04:32 By : sakuraei
 


 

No. 21



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

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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


ใช้วันที่แบบเต็มรูปดีกว่าครับ ตอนกลับมาแก้ไขโค้ดจะง่ายกว่าครับ

แต่น้องตองก็ ใช้โค้ดแบบนี้ได้นี่นา สงสัยพี่จะอ่านคู่มือไม่ลเอียด DATEDIFF(yyyy , year(2554-01-02) , ( year(GETDATE())+'543') ) as years1


ประวัติการแก้ไข
2013-02-13 10:11:19
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-13 10:07:42 By : sakuraei
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : รบกวนช่วยดู SQL ให้หน่อยคะ แสดงผลไม่ถูกคะถ้าแทนด้วยฟิลด์ในตาราง ลองแทนค่าลงไปตรงผลกลับออกมาถูกคะ ทั้งๆที่เหมือนกันทุกอย่าง ต่างแค่ตรงที่แทนค่า
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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 05
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 อัตราราคา คลิกที่นี่