我想将DATEADD(“ d”,-(DAY(GETDATE()))+ 1,GETDATE())转换为YYYY-MM-DD格式

时间:2019-02-22 20:46:08

标签: sql-server ssis expression etl derived-column

表达

DATEADD("d",- (DAY(GETDATE())) + 1,GETDATE()) 

是正确的,它给了我 2019/2/1下午3:45:02

但是我希望我的答案在SSIS中为2019-02-01

请帮助我

2 个答案:

答案 0 :(得分:1)

如果要获取值2019-02-01(格式为yyyy-MM-dd),则应将值转换为字符串并使用以下表达式:

LEFT((DT_WSTR,50)DATEADD("d",- (DAY(GETDATE())) + 1,GETDATE()) ,10)

输出

  

2019-02-01

基于Cast (SSIS Expression) official documentation

  

将字符串强制转换为DT_DATE或反之亦然时,将使用转换的语言环境。但是,无论区域设置首选项是否使用ISO格式,日期都采用YYYY-MM-DD的ISO格式。

如果您需要返回类型为DT_Date的返回值,则只需添加CAST操作即可:

(DT_DATE)LEFT((DT_WSTR,50)DATEADD("d",- (DAY(GETDATE())) + 1,GETDATE()) ,10)

请注意,在“日期”数据类型中,没有格式设置,值的存储方式与可视化方式不同。

输出

  

2/1/2019 12:00:00 AM

等同于

  

2/1/2019 00:00:00

答案 1 :(得分:0)

由于某种原因,在处理日期时,SSIS有点麻烦。基本上,您必须对其进行双重铸造...

(DT_DATE)(DT_DBDATE)DATEADD("d",- (DAY(GETDATE())) + 1,GETDATE())

注意:评估值为2/1/2019 12:00:00 AM。但是,当您在Expression Builder上单击“确定”时,您将看到显示为2/1/2019的值。

编辑据我所知,即使将日期格式转换为字符串然后返回日期,也无法更改日期格式。我不会认为这是一个问题-不用理会内部日期格式,以便后端可以处理它。日期格式实际上仅是出于显示目的的考虑,可以在SQL SELECT阶段进行操作。

是否出于某种原因需要更改日期格式以进行后端处理?