sql-server - 年函数不支持 dt_wstr

标签 sql-server date ssis expression etl

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

The year function doesn't support dt_wstr.

我使用的表达式是:

(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))

最佳答案

问题

从您提到的表达式来看,fisc_wk_end_dt列数据类型是字符串,而YEAR、MONTH、DAY函数的参数必须是日期类型。


来自官方文档:

语法

YEAR(date)

参数

date Is a date in any date format.

结果类型

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))

引用文献

关于sql-server - 年函数不支持 dt_wstr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57754518/

相关文章:

sql-server - 多列运行总计

sql - 在 SQL 中匹配相似的城市名称

javascript - 如何将 `new Date().getTime()/1000` 的(分数)结果转换为整数?

objective-c - Cocoa/Objc - 日期格式更改

date - SPSS:测试两个日期之间的间隔是否包含第二个间隔

sql-server - 提高大型数据集的 SSIS 包插入/删除速度(或者这样可以吗?)

sql-server - SqlDateTimeOverflow 异常,带有 Dapper 更新的可空 DateTime 字段

sql-server - Crystal Reports 假定存储过程中列的数据类型错误

sql-server - 如何保持事务和ssis包执行相互等待?

ssis - SSIS 如何知道 OnVariableValueChanged 事件中的哪个变量?