[SQL Server] 利用計算的資料行(Computed Column Specification)幫助擴展資料表的使用

摘要:[SQL Server] 利用計算的資料行(Computed Column Specification)幫助擴展資料表的使用

原問題-

以前在撰寫一些程式需求時,常常因為原先資料庫的設計,那SQL語法常常會做一些格式的改變,

或是不同欄位的合併產出,

常見的可能像是原本的資料表設計會把時間的年、月、日、甚至是時間都拆開到不同的欄位做存放,

就像原問題的狀況一樣,

但是在使用的時候,卻常常需要合併起來處理,往往就會寫像是

 SELECT CONVERT(date, (Y+'/'+M+'/'+D)) as dd 
	,CONVERT(time(0) ,(H+':'+Mi+':'+S)) as tt 
 From T1

當確定了公式邏輯後,就可以下這樣的指令去增加計算的資料行

ALTER TABLE T1 ADD dd AS CONVERT(date, (Y+'/'+M+'/'+D))
ALTER TABLE T1 ADD tt AS CONVERT(time(0),(H+':'+Mi+':'+S))

之後就可以直接寫

Select dd,tt From T1

就可以很方便的查詢出日期與時間了, 當然的,也可以輸入case when end 去作為公式

ALTER TABLE T1 ADD late AS (
	  case when CONVERT(time(0),(H+':'+Mi+':'+S)) > '08:00:00' 
                    and CONVERT(time(0),(H+':'+Mi+':'+S)) < '17:00:00' 
          Then dateadd(HH,-8,CONVERT(time(0),(H+':'+Mi+':'+S)))end)

而裡面的資料並不會真正的存在資料表裡,因為他是被計算出來的。

從SSMS裡面去看,可以在資料表上右鍵選擇設計模式去看,

你剛剛輸入的公式就會列在下方,"計算資料行規格裡" 。

當然要有所修改的時候,可以直接在這邊修改即可, 同時你也會發現在資料類型的地方他會是空的,

因為這部分會因為你的公式,資料庫自己去選擇適當的資料類型。


而呈現的結果就會像是

 

是不是還頗方便呢!!

 


歡迎大家一起到MSDN學習與討論