Query

僅在 SQL 中輸入小時數

  • October 31, 2018

是否可以僅為員工輸入工作時間?例如,我想輸入或導入一周的總工作時間,但我不斷收到錯誤消息。

我想在未來根據進出拳來計算小時數,但我想從一個簡單的小時和分鐘輸入開始。我已經看過但無法獲得任何建議。

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的列。

檢查:SQL 基礎:日期時間和間隔數據類型

沒有多少數據庫實現它們,但是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在這裡

引用自:https://dba.stackexchange.com/questions/168417