20120513

ขนาดของชนิดข้อมูลทั้งหมดมีค่าเท่ากันหมด

ค่าที่เป็น Date/Time หรือ DateTime รวมทั้ง TimeStamp เป็นค่าของ ตัวเลขขนาด 32 bits (4 Bytes)
โดยทุก Database ที่อ้างถึงชนิดข้อมูลนี้จะมีค่าเทียบเท่ากันรวมถึงภาษาโปรแกรมมิ่งต่าง ๆ ด้วย

ขนาดของชนิดข้อมูลทั้งหมดมีค่าเท่ากันหมด
Date = Time = DateTime = TimeStamp = 4 Bytes

รายละเอียดเพิ่มเติมดูได้ในเรื่อง Julian Date

ชนิดข้อมูลใน Firebird ที่เป็น วัน/เวลามีดังนี้
DATE = เก็บ วัน เดือน ปี เช่น 12/12/2001
TIME = เก็บ เวลา (ชั่วโมง นาที วินาที เศษของวินาที) เช่น 10:50:10
TIMESTAMP = เก็บ วัน และ เวลารวมกัน เช่น 12/12/2001 10:50:10

Firebird มี funtion ที่ใช้ในการดึงวันเวลา ดังนี้
CURRENT_DATE = วันที่ปัจจุบัน
CURRENT_TIME = เวลาปัจจุบัน
CURRENT_TIMESTAMP = วันและเวลาที่ปัจจุบัน
นอกจากนี้ยังมี
'Now' = วันที่ปัจจุบัน / เวลาปัจจุบัน / วันและเวลาที่ปัจจุบัน
'Today' = วันที่ปัจจุบัน
'Yesterday' = วันที่เมื่อวาน
'Tomorrow' = วันที่พรุ่งนี้

การอ้างวันที่เป็น String
'1/14/2001' = วันที่ 14 เดือน มกราคม 2001 (2544)
'9/25/2001' = วันที่ 25 เดือน กันยายน 2001 (2544)
ให้จำไว้ว่าระบุเดือนก่อน เสมอ จะเหมือนการเขียนวันที่ในแบบ American เช่น January 25, 2001 หรือ Febuary 14, 2005 เป็นต้น
แต่ Firbird ให้ทางเลือกมากกว่านั้นในการกำหนดวันที่แบบ Text
'2001-01-14' = วันที่ 14 เดือน มกราคม 2001 (2544)
'2001-09-25' = วันที่ 25 เดือน กันยายน 2001 (2544)
หรือ
'January 14, 2001' = 'January 14 2001' = 'Jan 14, 2001' =
'14 January 2001' = '14 Jan 2001' = '2001, January 14' =
'2001, Jan 14' = วันที่ 14 เดือน มกราคม 2001 (2544)

ข้อสรุปง่ายคือ หากเราสามารถระบุให้ชัดเจนได้ว่าข้อความที่ระบุเป็นวันที่อะไร Firebird จะแปลงข้อความนั้น ๆ ไปเป็น Date ให้อย่างถูกต้องเอง

ข้อสังเกตุ
'2001 Jan 14' = วันที่ 14 เดือน มกราคม 2001 (2544)
หรือ
'2001 Feb 28' = วันที่ 28 เดือน กุมภาพันธ์ 2001 (2544)
Firebird รู้ว่า หมายถึงวันไหนทั้งที่ เราระบุปีก่อน แต่กรณีนี้
'28/2/2001' จะ Error เพราะ เดือนที่ 28 ไม่มี
พูดง่ายคือรูปแบบ 'xx/xx/xxxx' = 'mm/dd/yyyy' เท่านั้น

เรายังสามารถบวกลบวันที่ได้โดยจะเป็นการบวกหรือลบวัน
เช่น
CURRENT_DATE - 1 = 'Yesterday'
'Yesterday' + 2 = 'Tomorrow'
'January 28, 2005' - 30 = 'December 29, 2004'

Code:
SELECT
CAST('January 28, 2005'AS DATE) - 30,
CAST('Yesterday'AS DATE) +2,
FROM
RDB$DATABASE

SELECT
A.DATE_FIELD - 1,
A.DATE_FIELD - 1
FROM
TABLEA A

UPDATE TABLEA
SET DATE_FIELD = 'Today'


นอกจากนี้ เรายังสามารถอ่านค่า วัน เดือน ปี ชั่วโมง นาที และ วินาที จาก ค่าที่เป็น DateTime ได้
โดยใช้ function EXTRACT
รูปแบบ EXTRACT( FROM )
ตัวอย่างCode:

EXTRACT(DAY FROM 'NOW')
EXTRACT(DAY FROM CURRENT_DATE)
EXTRACT(MONTH FROM ADATEFIELD)

SELECT
CURRENT_DATE,
EXTRACT(DAY FROM CURRENT_DATE),
EXTRACT(MONTH FROM CURRENT_DATE),
EXTRACT(YEAR FROM CURRENT_DATE),
EXTRACT(YEARDAY FROM CURRENT_DATE),
CURRENT_TIME,
EXTRACT(HOUR FROM CURRENT_TIME),
EXTRACT(MINUTE FROM CURRENT_TIME),
EXTRACT(SECOND FROM CURRENT_TIME)
-- EXTRACT(SECOND FROM 'NOW') AS CUR_SECOND
FROM
RDB$DATABASE;

/* เลือกข้อที่ฟิลด์ DATE อยู่ในเดือน 2 ปี 2005 */
SELECT
*
FROM
TABLEA A
WHERE
(EXTRACT(MONTH FROM A.DATE) = 2) AND
(EXTRACT(YEAR FROM A.DATE) = 2005)

/* หาค่าวันที่สุดท้ายของเดือนกุมภาพันธ์ */
SELECT
'Max day for Febuary of year ' || EXTRACT(YEAR FROM CURRENT_DATE) || ' is ' ||
CASE EXTRACT(MONTH FROM (CURRENT_DATE - EXTRACT(YEARDAY FROM CURRENT_DATE) + 59))
WHEN 2 THEN 29
ELSE 28
END
FROM
RDB$DATABASE; 




:: Function Int และ Function Fix ::

ใช้ในการปัดเศษของตัวเลขที่กำหนด มีรูปแบบดังนี้



รูปแบบ Int(number)
Fix(number)

number หมายถึงตัวเลขที่ต้องการปัดเศษ


ตัวอย่างการใช้งาน Function Int และ Function Fix คำสั่ง/ฟังก์ชั่น ความหมาย/ผลที่ได้
MyNumber = Int(99.8) MyNumber = "99"
MyNumber = Fix(99.2) MyNumber = "99"
MyNumber = Int(-99.8) MyNumber = "-100"
MyNumber = Fix(-99.8) MyNumber = "-99"
MyNumber = Int(-99.2) MyNumber = "-100"
MyNumber = Fix(-99.2) MyNumber = "-99"
 
ถ้าจำไม่ผิด varchar จะเก็บข้อมูลตามจริง เช่น ออกแบบไว้ 10 แต่ข้อมูลใน Field มี 5 มันจะเก็บ 5 char แต่ถ้า เป็น char ออกแบบไว้ 10 มี 5 ก็เก็บ 10 โดยมี space อีก 5 ครับ

0 comments:

Post a Comment

 

Copyright © Access เบื้องต้น Design by Gu