将天数添加到 SQL 中的日期?
Adding number of days to a date in SQL?
我有一个 table 持有账户列表以及他们进行交易的第一天。在所有情况下,此日期都早于 2020 年 8 月 31 日。
我想做的是算出每个帐户的第一笔交易与 31/08/2020 之间相隔了多少天,然后将此天数加上 31/08/2020 return 一个日期。
例如,输出应如下所示:
ACCOUNT_NUMBER | FIRST_TRANSACTION_DATE | MIDDLE_DATE | END_DATE
---------------|------------------------|-------------|-----------
1 | 2020-08-01 | 2020-08-31 | 2020-09-30
2 | 2020-08-11 | 2020-08-31 | 2020-09-20
对于帐户 1,由于 first_transaction_date 是 2020 年 8 月 31 日之前的 30 天,因此 end_date 是 20 年 8 月 31 日之后的 30 天。对于帐户 2,end_date 是 20 天之后,因为 first_transaction_date 是 20 天之前,依此类推。
这是我目前的代码:
SELECT ACCOUNT_NUMBER, FIRST_TRANSACTION_DATE, MIDDLE_DATE, MIDDLE_DATE+DAYS_TO_ADD AS END_DATE
FROM
(--SUBQUERY 1
SELECT ACCOUNT_NUMBER, FIRST_TRANSACTION_DATE, MIDDLE_DATE, DAYS(MIDDLE_DATE)-DAYS(FIRST_TRANSACTION_DATE) AS DAYS_TO_ADD
FROM
(--SUBQUERY 2
SELECT ACCOUNT_NUMBER, FIRST_TRANSACTION_DATE, '2020-08-31' AS MIDDLE_DATE
FROM TABLE1
)
)
;
子查询 1 和 2 工作,但添加 middle_date+days_to_add returns 错误 'invalid character found in a character string argument of the function "DECFLOAT"'.
请问有人知道我怎样才能让它工作吗?
'2020-08-31' 是一个 varchar(10),days(middle_date)
将其转换为日期,因为 days() 需要一个日期,但 middle_date+days_to_add
试图将其转换为 DECFLOAT , 失败了。
在值前添加日期关键字
SELECT ACCOUNT_NUMBER, FIRST_TRANSACTION_DATE, MIDDLE_DATE, MIDDLE_DATE+DAYS_TO_ADD AS END_DATE
FROM
(--SUBQUERY 1
SELECT ACCOUNT_NUMBER, FIRST_TRANSACTION_DATE, MIDDLE_DATE, DAYS(MIDDLE_DATE)-DAYS(FIRST_TRANSACTION_DATE) AS DAYS_TO_ADD
FROM
(--SUBQUERY 2
SELECT ACCOUNT_NUMBER, FIRST_TRANSACTION_DATE, date '2020-08-31' AS MIDDLE_DATE
FROM TABLE1
)
)
;
我有一个 table 持有账户列表以及他们进行交易的第一天。在所有情况下,此日期都早于 2020 年 8 月 31 日。
我想做的是算出每个帐户的第一笔交易与 31/08/2020 之间相隔了多少天,然后将此天数加上 31/08/2020 return 一个日期。
例如,输出应如下所示:
ACCOUNT_NUMBER | FIRST_TRANSACTION_DATE | MIDDLE_DATE | END_DATE
---------------|------------------------|-------------|-----------
1 | 2020-08-01 | 2020-08-31 | 2020-09-30
2 | 2020-08-11 | 2020-08-31 | 2020-09-20
对于帐户 1,由于 first_transaction_date 是 2020 年 8 月 31 日之前的 30 天,因此 end_date 是 20 年 8 月 31 日之后的 30 天。对于帐户 2,end_date 是 20 天之后,因为 first_transaction_date 是 20 天之前,依此类推。
这是我目前的代码:
SELECT ACCOUNT_NUMBER, FIRST_TRANSACTION_DATE, MIDDLE_DATE, MIDDLE_DATE+DAYS_TO_ADD AS END_DATE
FROM
(--SUBQUERY 1
SELECT ACCOUNT_NUMBER, FIRST_TRANSACTION_DATE, MIDDLE_DATE, DAYS(MIDDLE_DATE)-DAYS(FIRST_TRANSACTION_DATE) AS DAYS_TO_ADD
FROM
(--SUBQUERY 2
SELECT ACCOUNT_NUMBER, FIRST_TRANSACTION_DATE, '2020-08-31' AS MIDDLE_DATE
FROM TABLE1
)
)
;
子查询 1 和 2 工作,但添加 middle_date+days_to_add returns 错误 'invalid character found in a character string argument of the function "DECFLOAT"'.
请问有人知道我怎样才能让它工作吗?
'2020-08-31' 是一个 varchar(10),days(middle_date)
将其转换为日期,因为 days() 需要一个日期,但 middle_date+days_to_add
试图将其转换为 DECFLOAT , 失败了。
在值前添加日期关键字
SELECT ACCOUNT_NUMBER, FIRST_TRANSACTION_DATE, MIDDLE_DATE, MIDDLE_DATE+DAYS_TO_ADD AS END_DATE
FROM
(--SUBQUERY 1
SELECT ACCOUNT_NUMBER, FIRST_TRANSACTION_DATE, MIDDLE_DATE, DAYS(MIDDLE_DATE)-DAYS(FIRST_TRANSACTION_DATE) AS DAYS_TO_ADD
FROM
(--SUBQUERY 2
SELECT ACCOUNT_NUMBER, FIRST_TRANSACTION_DATE, date '2020-08-31' AS MIDDLE_DATE
FROM TABLE1
)
)
;