年函数不支持dt_wstr

时间:2019-09-02 09:29:16

标签: sql-server date ssis expression etl

我无法使用以下代码应用转换。出现错误

  

year函数不支持dt_wstr。

iam使用的表达式是:

(DT_I4)((DT_WSTR,4)YEAR(fisc_wk_end_dt) + 
       RIGHT("0" + (DT_WSTR,2)MONTH(fisc_wk_end_dt),2) + 
       RIGHT("0" + (DT_WSTR,2)DAY(fisc_wk_end_dt),2))

1 个答案:

答案 0 :(得分:2)

问题

根据您提到的表达式,看起来fisc_wk_end_dt列数据类型为字符串,而YEAR,MONTH,DAY函数的参数必须为date类型。


摘自官方文档:

语法

  

YEAR(日期)

参数

  

date是任何日期格式的日期。

结果类型

  

DT_I4


可能的解决方案

(1)使用TOKEN()函数

我将假设fisc_wk_end_dt包含一个以字符串形式存储的日期,例如:

1/1/2016

您正在寻找将其转换为整数`yyyyMMdd``:

20160101

然后您可以使用TOKEN()函数来实现:

TOKEN(fisc_wk_end_dt,"/",3) + RIGHT("0" + TOKEN(fisc_wk_end_dt,"/",2),2) + RIGHT("0" + TOKEN(fisc_wk_end_dt,"/",1),2) 

(2)试图解析该列的最新数据

您可以尝试将列解析为DT_DATE或DT_DBTIMESTAMP类型,如果日期以可以解析的格式存储,则可能会起作用。

(DT_I4)((DT_WSTR,4)YEAR((DT_DBTIMESTAMP)fisc_wk_end_dt) + 
   RIGHT("0" + (DT_WSTR,2)MONTH((DT_DBTIMESTAMP)fisc_wk_end_dt),2) + 
   RIGHT("0" + (DT_WSTR,2)DAY((DT_DBTIMESTAMP )fisc_wk_end_dt),2))

参考