Query
僅在 SQL 中輸入小時數
是否可以僅為員工輸入工作時間?例如,我想輸入或導入一周的總工作時間,但我不斷收到錯誤消息。
我想在未來根據進出拳來計算小時數,但我想從一個簡單的小時和分鐘輸入開始。我已經看過但無法獲得任何建議。
INSERT INTO EMPLOYEE(EmpID, EmpHours) VALUES (1000, (10:00:00));
謝謝!
您不能使用沒有日期部分的日期時間欄位。
但是您可以使用眾所周知的日期並將時間部分添加到該日期:
DECLARE @mydate datetime; SET @mydate = CAST('1900/01/01 10:02' AS datetime); SELECT @mydate;
| (無列名) | | :------------------ | | 01/01/1900 10:02:00 |
或者,您可以使用時間欄位來儲存時間
DECLARE @mytime time(4); SET @mytime = '10:00:00'; SELECT @mytime;
| (無列名) | | :--------------- | | 10:00:00 |
假設該
EmpHours
列是時間類型列,您需要INSERT
像這樣修改您的語句:INSERT INTO EMPLOYEE(EmpID, EmpHours) VALUES (1000, ('10:00:00'));
請注意周圍的單引號
'10:00:00'
- 基於字元的文字需要這些單引號。請注意, - 周圍沒有單引號,1000
它是一個數值,並且不需要單引號。dbfiddle在這裡
如果要表示時間量或持續時間,則不希望使用時間類型的列。您實際上想要使用類型為interval的列。
沒有多少數據庫實現它們,但是PostgreSQL實現了。
例如,您可以像這樣定義您的表:
CREATE TABLE employee_hours ( employee_id integer NOT NULL /* REFERENCES employee(employee_id) */, work_duration interval NOT NULL ) ;
您將插入這樣的值:
INSERT INTO employee_hours (employee_id, work_duration) VALUES (1, '8:15'), (1, '7:55') ;
這樣,您可以添加間隔,並獲得整個工作時間:
SELECT employee_id, sum(work_duration) AS total_work_time FROM employee_hours GROUP BY employee_id ;
你得到
員工編號 | 總工作時間 ----------: | :-------------- 1 | 16:10:00
如果您使用的數據庫無法使用間隔,我建議您只使用一
integer
列,呼叫它minutes_worked
,然後使用它來計算分鐘(所以:'7:55'
變成7*60+55
分鐘)dbfiddle在這裡