มีปัญหาเกี่ยวกับเรื่อง date ที่ดึงจาก sql server 2008 64bit อ่ะครับ รบกวนผู้รู้ช่วยทีครับ

คือว่าใช้ asp ดึงข้อมูลจาก sql server ขึ้นมาแล้วแสดงเป็น เดือน/วัน/ค.ศ. อ่ะครับ อยากให้มันดึงออกมาแสดงเป็น วัน/เดือน/พ.ศ. อ่ะครับ ช่วยหน่อยนะครับ
พวก date time server ก็ปรับเป็น พ.ศ. หมดแล้ว timezone ก็เป็น บางกอก แล้วอ่ะครับ ส่วนภาษาที่ตัว sql server ก็เปลี่ยนเป็น thai หมดแล้ว เช่น collation ที่ตัว database และ server collation ก็เป็น ไทย แล้วอ่ะครับ หรือมันมีตัวอื่นอีกช่วยแนะนำด้วยครับ

ขอบคุณครับ:baa60776:

เวงกำ ผ่านผิดขออภัยด้วยครับ

แนะนำควรเก็บข้อมูลเกี่ยวกับ Date เป็น ค.ศ. ครับ

ในส่วนตอน Query ออกมาใช้รูปแบบตามนี้ครับ

SELECT CONVERT(VARCHAR(10), GETDATE(), 103) AS [DD/MM/YYYY]

  • ตอนแสดงค่อยมาเขียนฟังก์ชั่นแปลงเป็น พ.ศ.
  • ตอนบันทึกแปลงจาก พ.ศ. เป็น ค.ศ. ก่อนแล้วค่อยบันทึก

แล้วมีวิธีแก้ที่ตัว sql server เองไหมครับ

ปัญหาการเก็บข้อมูลพวก Date-Time เป็นปัญหา Classic ของ Programmer ทุกยุคทุกสมัยอยู่แล้วครับ โดยเฉพาะกับปี พ.ศ.
ฉะนั้นการจัดเก็บที่ดี เพื่อที่จะได้ใช้ Function ต่างๆเกี่ยวกับ Date ได้ถูกต้องควรจัดเก็บเป็น ค.ศ. ตามที่แนะนำไว้

แต่ก็มีหลายๆ หน่วยงานเก็บเป็น Varchar แทน ปัญหาที่ตามมาคือระบบมันจะ Convert ผิดนะครับ
หรือจะใช้วิธีจัดเก็บแบบ julian calendar โดยการจัดเก็บเป็นแบบ Numeric แทน

เช่น

20131 = 01/01/2013
20132 = 02/01/2013
20133 = 03/01/2013



201331 = 31/01/2013
[COLOR=#ff0000]201332 = 01/02/2013 (นับเพิ่มไปเรื่อยๆ)

[/COLOR]

ของผมเก็บแบบ var char ครับ
เช่น 20130120 <= ปี 2013 เดือน 01 วันที่ 20

เมื่อ เคยเก็บเป็น date แล้วโดน Access เล่นงาน
เครื่องที่เขียนโปรแกรม date set เป็น yyyy/mm/dd
เครื่องที่ใช้งาน ดัน set เป็น dd/mm/yy อีกเครื่องก็ mm/dd/yyyy ซะงั้น
พอค้น date ไม่เคยเจอ แถม error อีกต่างหาก

แต่เดี๋ยวนี้ น่าจะแก้ปัญหา format ของ date เรื่องนี้แล้ว

ถ้า php ผมเก็บเป็น timestamp ตลอด

ครับเรื่องเก็บเป็น ค.ศ. ครับ ไม่มีการเปลี่ยนแปลงครับ แต่ผมติดที่การเรียกออกมาอ่ะครับ มันก็เป็น ค.ศ. เหมือนกัน ซึ่งคิดว่ามันน่าจะมีวิธีอื่นที่สามารถแก้ปัญหาให้เรียกออกมาได้เป็น พ.ศ. โดยไม่ต้องแก้สคริปน่ะครับ (เพราะโฮสเก่ามันได้ พอย้ายมาโฮสใหม่ไม่ได้ซะอย่างงั้น)

ลองเปลี่ยน locale ของตัว Windows Server ดูครับ

แต่ที่จริงแล้วควรแก้ code ให้เรียกใช้ปีจากระบบโดยตรง ไม่ใช่จากปีที่มีการจัด format แล้ว

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

locale เป็น thai อยู่แล้วครับ (หรือว่าต้องเปลี่ยนเป็นอย่างอื่นครับ?)

ส่วนอีกบรรทัดผมไม่เข้าใจครับ>>แต่ที่จริงแล้วควรแก้ code ให้เรียกใช้ปีจากระบบโดยตรง ไม่ใช่จากปีที่มีการจัด format แล้ว

ควรเขียน code ให้มีการตรวจสอบรองรับกับทุกระบบ ไม่ว่า os จะตั้ง default เป็นภาษาไทยหรืออังกฤษ ตั้ง date เป็น ปี พศ หรือ คศ ตัวโปรแกรมก็ควรทำงานได้ถูกต้องเสมอ ค่าที่จัดเก็บลง database จะต้องเหมือนกัน
พูดง่ายๆก็คือควรจัดเก็บเป็นปี คศ แล้วมาแปลงเป็น พศ ตอนแสดงผล และจะให้ดีในโปรแกรมก็ควรมี option ให้เลือกด้วยว่าจะแสดงผลเป็นปี คศ หรือ พศ ซึ่งตรงนี้น่าจะต้องสอดคล้องกับการ input ด้วย

ลองเปลี่ยน Current Format เป็น Thai และเปลี่ยน Calendar Type เป็นพุทธศักราช

คือเวลาเรียกวันที่มาใช้ ถ้าใช้ Function ธรรมดามันก็จะไปอิงกับ format ต่าง ๆ ที่ตั้งเอาไว้ ซึ่งก็จะทำให้เกิดปัญหาลักษณะนี้ได้
ทางที่ดีก็คือ เรียกใช้ function ที่ไม่อิงกับ format ต่าง ๆ

เช่น

Response.Write Now
Response.Write Year(Now)
ถ้าตั้งให้แสดงผลเป็น พ.ศ. ผลลัพธ์ออกมาบรรทัดแรกจะได้ปีเป็น 2556 บรรทัดที่สองจะเป็น 2013

กรณีดึงข้อมูลจาก SQL Server มันก็มาเป็น RecordSet ก็ควรจะต้องเอามาแปลงเป็น string เอง
หากใช้ function convert ที่มีมากับระบบ ก็อาจจะเจอว่า format ไม่เหมือนกันในแต่ละเครื่อง