Sql server 基于动态值的月初和月底日期

Sql server 基于动态值的月初和月底日期,sql-server,date,ssis,etl,Sql Server,Date,Ssis,Etl,使用SSIS 2013,我有一个表,其中发票日期存储为整数,格式为YYYYMMDD,我需要根据发票日期确定月初日期和月底日期。开始日期和结束日期也将存储为整数 例如,我的发票日期是:20170512 我想返回:20170501(BeginDate) 和20170531(EndingDate)您可以使用以下表达式添加两个派生列“ 这些表达式将返回两列类型为DT\u DATE 第一天: (DT_DATE)(LEFT([InvoiceDate],4) + "-" + SUBSTRING([Invoic

使用SSIS 2013,我有一个表,其中发票日期存储为整数,格式为
YYYYMMDD
,我需要根据发票日期确定月初日期和月底日期。开始日期和结束日期也将存储为整数

例如,我的发票日期是:
20170512
我想返回:
20170501
(BeginDate)
和20170531(
EndingDate

您可以使用以下表达式添加两个派生列“

这些表达式将返回两列类型为
DT\u DATE

第一天:

(DT_DATE)(LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01")
DATEADD("d",-1,DATEADD("m",1,(DT_DATE)(LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01")))
LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01"
LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + RIGHT("0" + (DT_WSTR,2)DAY(DATEADD("d",-1,DATEADD("m",1,(DT_DATE)(LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01")))),2)
最后一天:

(DT_DATE)(LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01")
DATEADD("d",-1,DATEADD("m",1,(DT_DATE)(LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01")))
LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01"
LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + RIGHT("0" + (DT_WSTR,2)DAY(DATEADD("d",-1,DATEADD("m",1,(DT_DATE)(LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01")))),2)
如果需要返回格式相同的两列
YYYYMMDD

第一天:

(DT_DATE)(LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01")
DATEADD("d",-1,DATEADD("m",1,(DT_DATE)(LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01")))
LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01"
LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + RIGHT("0" + (DT_WSTR,2)DAY(DATEADD("d",-1,DATEADD("m",1,(DT_DATE)(LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01")))),2)
最后一天:

(DT_DATE)(LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01")
DATEADD("d",-1,DATEADD("m",1,(DT_DATE)(LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01")))
LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01"
LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + RIGHT("0" + (DT_WSTR,2)DAY(DATEADD("d",-1,DATEADD("m",1,(DT_DATE)(LEFT([InvoiceDate],4) + "-" + SUBSTRING([InvoiceDate],5,2) + "-01")))),2)

谢谢Hadi,我稍微修改了您的答案,首先将发票日期移动到字符串,然后删除了破折号。然后我将该输出移动到整数列,效果非常好。@gbdeveloper如果此答案解决了您的问题,您必须接受它,如果您觉得它有帮助,请随意向上投票:)@gbdeveloper阅读此指南以了解情况很好更多关于接受和投票的回答这个问题没有显示出任何研究成果。