将两个日期合并为一个整数

时间:2014-08-11 06:34:24

标签: sql database oracle database-design

我正在使用SAP数据服务,我需要将YYYYMMDDYYYYMMDD组合到int字段,其中第一个YYYYMMDD是月(和年)的第一天,下一个YYYYMMDD是同一年和月的最后一个日期。 在输入时,我有年数和月份字段与int数据类型。

如果目标字段是varchar数据类型,则此工作正常。当我更改为目标字段int时,结果为NULL,因为||。需要一些更好的建议。

cast(to_char( to_date( Excel2.Year|| lpad(Excel2.Month, 2, '0') || '01', 'YYYYMMDD'), 'YYYYMMDD'), 'int')
||
cast(to_char( last_date( to_date( Excel2.Year|| lpad(Excel2.Month, 2, '0') || '01', 'YYYYMMDD')), 'YYYYMMDD'), 'int')

2 个答案:

答案 0 :(得分:0)

试试这个:

DECLARE @Year INT = 2014
DECLARE @Month INT = 08
DECLARE @Prefix DATETIME = CAST(@Year AS VARCHAR(5))+'-'+CAST(@MONTH AS VARCHAR(5))+'-'+'01'

DECLARE @LastDate VARCHAR(20) = (SELECT LEFT(CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@Prefix))),DATEADD(mm,1,@Prefix)),103),2))
DECLARE @Suffix DATETIME = CAST(@Year AS VARCHAR(5))+'-'+CAST(@MONTH AS VARCHAR(5))+'-'+@LastDate
SELECT CONVERT(VARCHAR(20),@Prefix,112)+CONVERT(VARCHAR(20),@Suffix,112)

答案 1 :(得分:0)

当您尝试将2014010120140101(YYYMMDDYYYMMDD)设置为INT数据类型时,我猜您遇到的情况会溢出。在t-sql中我们有BIGINT可以处理这个字符串,如果Oracle有类似的数据类型,请用INT替换BIGINT

DECLARE @variable INT
SELECT @variable = '2014010120140101'

SELECT @variable

**错误:

varchar值的转换' 2014010120140101'溢出一个int列:DECLARE @variable INT SELECT @variable =' 2014010120140101' SELECT @variable **

DECLARE @variable BIGINT
SELECT @variable = '2014010120140101'

SELECT @variable