คุณสามารถเพิ่มคอลัมน์ใหม่และอัปเดตด้วยตนเองตามที่ @gbn แนะนำ แต่ตอนนี้คุณต้องปรับปรุงคอลัมน์นี้ให้ทันสมัยอยู่เสมอด้วยทริกเกอร์การแทรก / อัปเดตหรือกลไกอื่น ๆ การขอยืม @ gbn เป็นการเดาชื่อตาราง / คอลัมน์ต่อไปนี้เป็นวิธีการต่าง ๆ ที่ไม่ต้องการการบำรุงรักษาอย่างต่อเนื่อง
คอลัมน์ที่คำนวณ
ALTER TABLE dbo.MyTable ADD NewIntColumn AS
CONVERT(INT, DATEDIFF(SECOND, '19000101', MyDateTimeColumn));
--or for Unix epoch
ALTER TABLE dbo.MyTable ADD NewIntColumn AS
CONVERT(INT, DATEDIFF(SECOND, '19700101', MyDateTimeColumn));
คุณยังสามารถคงอยู่และจัดทำดัชนีคอลัมน์นี้ซื้อขายประสิทธิภาพการค้นหาสำหรับการจัดเก็บ แต่คุณจะต้องทำการเปลี่ยนแปลงเล็กน้อยในการคำนวณ (การพยายามคงอยู่ข้างต้นจะทำให้เกิดข้อผิดพลาดเกี่ยวกับการคำนวณที่ไม่ได้กำหนดไว้):
ALTER TABLE dbo.MyTable ADD NewIntColumn AS
CONVERT(INT, DATEDIFF(SECOND, 0, MyDateTimeColumn)) PERSISTED;
-- or for Unix epoch
ALTER TABLE dbo.MyTable ADD NewIntColumn AS
CONVERT(INT, DATEDIFF(SECOND, 25567, MyDateTimeColumn)) PERSISTED;
คุณต้องการคงคอลัมน์ไว้หากคุณกังวลเกี่ยวกับประสิทธิภาพการอ่านมากกว่าการเขียน (หรือที่เก็บข้อมูล)
ดู
ข้อดีอย่างหนึ่งของมุมมองในคอลัมน์ใหม่คือคุณไม่ต้องเปลี่ยนสคีมาตารางพื้นฐาน (หรือกังวลเกี่ยวกับการทำให้เป็นปัจจุบัน) คุณชำระค่าใช้จ่ายในการคำนวณ ณ เวลาสอบถามซึ่งเหมือนกับคอลัมน์ที่คำนวณได้แบบไม่ยืนยัน
CREATE VIEW dbo.vMyTable
AS
SELECT -- other columns,
MyDateTimeColumn,
NewIntColumn = DATEDIFF(...whichever calc above makes sense...)
FROM dbo.MyTable;
Runtime
เนื่องจากการคำนวณข้างต้นไม่ซับซ้อนเกินไปให้รวมการคำนวณในข้อความค้นหาของคุณ หวังว่าคุณกำลังใช้โพรซีเดอร์ที่เก็บไว้สำหรับการเข้าถึงข้อมูลดังนั้นคุณจึงไม่ต้องทำซ้ำบ่อยๆ