我有这个SQL代码:
Select [Name] = case when CHARINDEX(''.'', [Name])>0
then LEFT([Name],CHARINDEX(''.'', [Name])-1)
else [Name] end,
[System] = case when reverse(SUBSTRING(REVERSE( System),1,CHARINDEX('':'', REVERSE(System)))) like '':''
then ( System + ''\'')
else System end
我正在创建我的SSIS工作流程,以便使用SSIS构建我的ETL。要创建上面的转换,我使用的是派生列对象。 对于第一个陈述,我试试这个:
ISNULL(SUBSTRING([Name],1,FINDSTRING([Name],".",1) - 1)) ? [Name] : SUBSTRING([Name],1,FINDSTRING([Name],".",1) - 1)
但它给了我错误......
如何进行两次转换?
谢谢!
答案 0 :(得分:1)
@[User::t] = (FINDSTRING(@[User::Name], ".", 1) == 0 ? 0 : 1 )
FINDSTRING( @[User::Name] ,".",1) == 0 ? @[User::Name] : SUBSTRING( @[User::Name] ,1,FINDSTRING( @[User::Name] ,".",1) - @[User::t] )
。注意:在表达式中,您在SubString中使用-1,当名称中没有点(。)时,表达式将抛出错误。 FindString将给出0,因此不允许在外部SubString中使用0-1。第一个表达式已经检查了这个并且在没有点时将@ [User :: t]赋值为0,因为0-0不会出错。