Sql server 使用表达式将日期格式M/d/yyy hh:mm:ss更改为yyyy mm dd
嗨,我对ssis有一个疑问 我想使用ssis表达式将日期格式Sql server 使用表达式将日期格式M/d/yyy hh:mm:ss更改为yyyy mm dd,sql-server,datetime,ssis,etl,ssis-2012,Sql Server,Datetime,Ssis,Etl,Ssis 2012,嗨,我对ssis有一个疑问 我想使用ssis表达式将日期格式M/d/yyy hh:mm:ss更改为yyy-mm-dd,日期格式变量datatype为string,并获取格式,如2019年5月28日12:00:00 AM。数据如下: 2019年5月28日上午12:00:00 基于上述值,我希望在其他变量中输出 2019-05-28 我试着表达我的想法 (DT_STR, 4, 1252) DATEPART("yy" , @[User::DateFormat]) + "-" + RIGHT("0"
M/d/yyy hh:mm:ss
更改为yyy-mm-dd
,日期格式变量datatype为string,并获取格式,如2019年5月28日12:00:00 AM
。数据如下:
2019年5月28日上午12:00:00
基于上述值,我希望在其他变量中输出
2019-05-28
我试着表达我的想法
(DT_STR, 4, 1252) DATEPART("yy" , @[User::DateFormat]) + "-" +
RIGHT("0" + (DT_STR, 2, 1252) DATEPART("mm" , @[User::DateFormat]), 2) +
"-" + RIGHT("0" + (DT_STR, 2, 1252) DATEPART("dd" , @[User::DateFormat]), 2)
但得到的错误如下所示:
其他信息:
函数“YEAR”不支持的数据类型为“DT_WSTR”
参数1。该参数的类型无法隐式设置
转换为函数的兼容类型。要做到这一点
操作时,需要使用强制转换显式强制转换操作数
接线员
评估函数“年”失败,错误代码为0xC0047089
函数“YEAR”不支持的数据类型为“DT_WSTR”
参数1。该参数的类型无法隐式设置
转换为函数的兼容类型。要做到这一点
操作时,需要使用强制转换显式强制转换操作数
接线员
您能告诉我如何在ssis中编写表达式以完成此任务吗?主要错误是,
@[User::DateFormat]
变量是字符串变量,而DATEPART()
函数只能应用于日期时间值。(即使字符串变量存储日期时间值)
您可以使用TOKEN()
函数实现以下功能:
TOKEN(TOKEN( @[User::DateFormat],"/",3)," ",1) + "-" +
RIGHT("0" + TOKEN( @[User::DateFormat],"/",2),2) + "-" +
RIGHT("0" + TOKEN( @[User::DateFormat],"/",1) ,2)
使用数据类型字符串在SSIS包中创建一个新变量,并在该变量的输入中使用datetime字段(此处为
@[User::variable]
),如下表达式所示:
(DT_WSTR, 4) YEAR( @[User::Variable] ) + "-" +
RIGHT("0"+(DT_WSTR,2) MONTH( @[User::Variable] ),2) + "-" +
RIGHT("0"+(DT_WSTR, 2) DAY( @[User::Variable] ),2)
如果需要,您可以稍后将此字符串变量转换为日期类型。我添加了日期类型转换。 这会有帮助的
(DT_WSTR, 4) YEAR( (DT_DATE) @[User::Variable] ) + "-" + RIGHT("0"+(DT_WSTR,2) MONTH( (DT_DATE) @[User::Variable] ),2) + "-" + RIGHT("0"+(DT_WSTR, 2) DAY( (DT_DATE) @[User::Variable] ),2)
OP提到DateFormat变量datatype是string,他如何使用
YEAR()
函数?!然后,您可以使用日期类型强制转换。仅仅是一点变化(DT_WSTR,4)年((DT_日期)@[User::Variable])+“-”+对(“0”+(DT_WSTR,2)个月((DT_日期)@[User::Variable]),2)+“-”+对((DT_WSTR,2)天((DT_日期)@[User::Variable]),2)这不是正确的方式,即使它给出了预期的输出。既然可以使用TOKEN()简单地提取这些部分,为什么还要将日期转换为字符串呢?同意。以前不知道令牌。请检查token()
和TOKENCOUNT()
函数,它们非常有用:在不接受任何答案的情况下提出25个以上的问题!!请阅读更多关于投票和接受答案的信息