假設您在 MySQL 中有一個完整的列,即 YYYY-MM-DD,并且您想選擇它作為特定日期的月數,并將其作為一個新列。示例日期可以是 2020 年 3 月。
所以以下(table_1):
| Emp_Name | 雇用日期 |
|---|---|
| 史蒂夫 | 2018-03-28 |
到
| Emp_Name | 月_就業 |
|---|---|
| 史蒂夫 | 24 |
但是對 Hire_Date 列中的每個日期執行此操作,而無需在 DATEDIFF 或 TIMESTAMPDIFF 中手動輸入開始和結束日期。
我有以下內容,它回傳一個新列,但具有 NULL 值:
select
Emp_Name, timestampdiff(month, 2021-04-01, Hire_Date) as Months_Employed
from
table_1
我也嘗試過 DATEDIFF 并除以 12,但它不起作用。
任何幫助表示贊賞。
編輯有效的答案:
SELECT
emp_name,
TIMESTAMPDIFF(month, hire_date, '2022-03-07')
AS months_employed
FROM table_1
uj5u.com熱心網友回復:
TIMESTAMPDIFF(MONTH, startDate, endDate)是正確使用的函式。
日期常量需要顯示為文本字串。 '2021-04-01'是 2021 年愚人節。但是2021-04-01,沒有引號,是一個計算為 的算術運算式2016。
這是一個小提琴。
SELECT emp_name,
hire_date,
TIMESTAMPDIFF(MONTH, hire_date, '2022-03-07')
FROM table_1
uj5u.com熱心網友回復:
該DATEDIFF函式回傳天數的差異。如果要月數,則需要將此數字除以 30(假設一個月平均有 30 天)。
由于您的輸出為 NULL,因此型別可能存在問題Hire_Date,因此我將CASTvalue 設定Hire_Date為DATE型別。
SELECT
Emp_Name,
DATEDIFF(
CAST('2021-04-01' AS DATE),
CAST(Hire_Date AS DATE)
)/30 AS Months_Employed
FROM
table_1
對你起作用嗎?
uj5u.com熱心網友回復:
有一個mysql函式可以讓你通過傳入年份和月份來實作這一點。 PERIOD_DIFF(P1,P2) - 回傳周期 P1 和 P2 之間的月數。P1 和 P2 的格式應為 YYMM 或 YYYYMM。請注意,句點引數 P1 和 P2 不是日期值。
SELECT PERIOD_DIFF(200802,200703);
-> 11
SELECT emp_name,
PERIOD_DIFF
(
202104,
DATE_FORMAT(hire_date,"%Y%m")
) AS "Months_Employed"
FROM employees;
uj5u.com熱心網友回復:
您可以使用以下查詢中的功能添加生成的列:
select d,timestampdiff(month,'2020-03-01',d) X from dates where day(d)=1 and year(d)<=2020;
輸出:
| d | X |
|---|---|
| 2020-01-01 | -2 |
| 2020-02-01 | -1 |
| 2020-03-01 | 0 |
| 2020-04-01 | 1 |
| 2020-05-01 | 2 |
| 2020-06-01 | 3 |
| ... | ... |
在您的情況下,例如:
alter table table_1
modify column Months_Employed integer
generated always as (timestampdiff(month,'2020-03-01',Hire_Date)) stored;
更多資訊:ALTER TABLE 和生成的列
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/461668.html
