|
|
|
SQL: สอบถามการ Query ข้อมูลวันที่ที่เก็บข้อมูลเป็น Char |
|
|
|
|
|
|
|
ตัวแปร $date ในที่นี่คือ
$date = date("Y/m/d");
|
|
|
|
|
Date :
2013-10-08 16:23:49 |
By :
สบายดี |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองใช้การเก็บวันที่ในรูปแบบ 2013/10/01 ดูสิคับ
|
|
|
|
|
Date :
2013-10-08 16:24:08 |
By :
maojunghi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ยังไม่ได้ครับ คือ ข้อมูลวันที่เก็บเป็น Char(10) แล้วพอ Select ข้อมูล เพื่อหาวันที่ทำงานที่มากกว่าหรือเท่ากับ '01/10/2013' แล้วข้อมูลออกมาทั้งหมดเลย ไม่ได้อยู่ในช่วงที่มากกว่า วันที่ 01/10/2013 เพราะในฐานข้อมูลวันทีเก็บเป็น Char ครับ
|
|
|
|
|
Date :
2013-10-08 16:26:42 |
By :
mitchiketta |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ยกตัวอย่าง
1 AA 03/09/2013
2 BB 07/09/2013
3 CC 05/10/2013
4 DD 02/10/2013
พอใช้ SELECT * FROM Work WHERE wk_date >='01/10/2013'
ข้อมูลออกมาทั้งหมดเลยครับ
แต่ต้องการให้แสดงผลแค่
3 CC 05/10/2013
4 DD 02/10/2013
|
|
|
|
|
Date :
2013-10-08 16:30:25 |
By :
mitchiketta |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เำพราะ type มันเป็น char ไงครับ มาเทียบ แบบนี้ มันไม่ได้หรอก ยังไงก็ออกหมด เพราะมันมองเป็น ตัวอักษร ที่เอามาเทียบ ไม่ใช่ มองเป็นตัวเลข
if('01/10/2013' <= '03/09/2013'){
print "1";
}
|
|
|
|
|
Date :
2013-10-08 16:35:52 |
By :
freshymusic |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
01/10/2013
03/09/2013
07/09/2013
05/10/2013
02/10/2013
ลองดูนะคับถ้าใช้การเก็บข้อมูลในลักษณะนี้
ผมยกตัวอย่าง เรียงจากมากไปหาน้อย
07/09/2013
05/10/2013
03/09/2013
02/10/2013
01/10/2013
มันจะเรียงตามพจนานุกรม
ลงเปลี่ยนรูปแบบการเก็บข้อมูลเป็น
2013/09/07
2013/10/05
2013/09/03
2013/10/02
2013/10/01
ลองดูนะคับถ้าใช้การเก็บข้อมูลในลักษณะนี้
ผมยกตัวอย่าง เรียงจากมากไปหาน้อย
2013/10/05
2013/10/02
2013/10/01
2013/09/07
2013/09/03
มันจะเรียงถูกต้อง
|
|
|
|
|
Date :
2013-10-08 16:39:54 |
By :
maojunghi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- แนะนำ เปลี่ยน ชนิดของตัวแปร (ยังทันไหม) ซึ่งถ้ามาถามในนี้คงเปลี่ยนไม่ได้ (ถามเองตอบเอง 555+) ขอเหตุผลทำไมเปลี่ยน type ไม่ได้ จะได้เป็นแนวทางกับผู้อ่านท่านอื่น ๆ
- นึกได้แค่ และ แนะนำว่า
1. select ค่า วันที่ที่เก็บเป็น char ออกมาทั้งหมด
2. จับเข้าฟังก์ชั่น อะไรสักอย่าง เช่น ใช้ substr() ในการแยกค่ามันออก แล้วทำให้มันอยู่ในรูปแบบ date/time ที่ถูกต้อง
3. เอาค่าวันจริง ๆ ที่ต้องการไปเทียบ ไปคำนวณ (การหาผลต่างของวันที่ กระทู้เก่า ๆ มี)
นึกได้แบบนี้จริง ๆ
|
|
|
|
|
Date :
2013-10-08 17:00:05 |
By :
apisitp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (SQL)
select wk_date >=date_format(STR_TO_DATE('01/10/2013','%d/%m/%y'),'%d/%m/%y')
ใช้แบบนี้ก็ convert ได้ครับ แต่ว่า ถ้า query ชุดใหญ่ๆ ระวังจะข้านะครับกว่าจะได้ผลลัพ
|
ประวัติการแก้ไข 2013-10-08 17:56:49
|
|
|
|
Date :
2013-10-08 17:51:13 |
By :
zoceferatu |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก็ให้คนที่บังคับมาทำให้ดูหน่อยสิ ผิดหลักการ มันก็ไม่ใช่แล้วอ่ะครับ
งง...เหอะ ๆ
|
|
|
|
|
Date :
2013-10-08 23:02:01 |
By :
apisitp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เก็บเป็น char แต่ตอน query convert เป็น datetime กลับมาใช้ได้ไหม
ตัวอย่าง sql server มิใช่ mysql
select convert(smalldatetime, fieldname, 103) as mydate from....
ปล. 103 คือ format dd/mm/yyyy
|
|
|
|
|
Date :
2013-10-09 10:01:27 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
บังคับใช้ tis-620 ยังพอทน แต่รูปแบบวันที่เป็น char นี่ไม่ไหว
ลองเพิ่มคอลัมน์เก็บวันที่ในรูปแบบ date() ได้ไหมครับ
แล้วลองหาทางเขียนคำสั่งแปลงข้อมูลจาก char() บันทึกใน date()
ของเก่าของเขาก็ปล่อยไว้ เราก็ query จากคอลัมน์ date ใหม่ของเรา
|
|
|
|
|
Date :
2013-10-09 11:06:25 |
By :
nutsuanplu |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|