Sql server 从SQL中的defind字符串输出中去掉非标准字符
我正在尝试从SQL中定义的字符串输出中去掉非标准字符,其中会有很多字符,因此我希望使用case而不是替换,但我无法使其工作。有什么建议吗Sql server 从SQL中的defind字符串输出中去掉非标准字符,sql-server,Sql Server,我正在尝试从SQL中定义的字符串输出中去掉非标准字符,其中会有很多字符,因此我希望使用case而不是替换,但我无法使其工作。有什么建议吗 select distinct( CASE (SORT_CODE + cast(replicate('0',8-len(ACCOUNT_NUMBER)) + ACCOUNT_NUMBER as char(8)) + '0' + '17' --to be
select distinct( CASE (SORT_CODE
+ cast(replicate('0',8-len(ACCOUNT_NUMBER))
+ ACCOUNT_NUMBER as char(8))
+ '0'
+ '17' --to be replaced by a check for a specific type
+ cast (replicate('0',11-len(replace(CURRENT_CHARGE_INCL,'.',''))) + replace(CURRENT_CHARGE_INCL,'.','') as char(11))
+ cast(left(LAST_NAME, 10) + replicate(' ',18) as char(18)) + upper(cast(TRADING_NAME + replicate(' ',18) as char( 18))) )
WHEN '.' THEN ' '
WHEN '&' THEN ' '
WHEN ',' THEN ' '
else DD_line
END)
as DD_LINE
问题是你的声明读起来不像你想象的那样。 你的声明基本上是这样读的:
SELECT DISTINCT CASE WHEN @string = '.' THEN ' '
WHEN @string = '&' THEN ' '
相反,在您注意到代码的可能有问题的列/变量上运行CASE
语句。如果您拥有CREATE
权限,请使用UDF
对每个零件进行处理,或者正确地将其写出。您的代码将更易于阅读
不幸的是,您没有在语句中提供违规字符的位置,因此类似于此示例的内容就足够了:
select distinct( (SORT_CODE
+ cast(replicate('0',8-len(
CASE WHEN CHARINDEX('.', ACCOUNT_NUMBER) <> 0 THEN REPLACE(ACCOUNT_NUMBER, '.', ' ')
WHEN CHARINDEX('&', ACCOUNT_NUMBER) <> 0 THEN REPLACE(ACCOUNT_NUMBER, '.', ' ')
WHEN CHARINDEX(',', ACCOUNT_NUMBER) <> 0 THEN REPLACE(ACCOUNT_NUMBER, '.', ' ') END
)) )
+ CAST( CASE WHEN CHARINDEX('.', ACCOUNT_NUMBER) <> 0 THEN REPLACE(ACCOUNT_NUMBER, '.', ' ')
WHEN CHARINDEX('&', ACCOUNT_NUMBER) <> 0 THEN REPLACE(ACCOUNT_NUMBER, '&', ' ')
WHEN CHARINDEX(',', ACCOUNT_NUMBER) <> 0 THEN REPLACE(ACCOUNT_NUMBER, ',', ' ')
ELSE DD_LINE END as char(8))
)
)
选择不同的((排序)代码
+强制转换(复制('0',8列(
CHARINDEX('.',账号)0然后替换(账号'.'','')时的情况
当CHARINDEX(“&”,账号)为0时,则替换(账号“,”
当CHARINDEX(‘,’,账号)为0时,则替换(账号,‘,’,’)结束
)) )
+强制转换(当CHARINDEX('.',账号)0然后替换(账号,'.','')
当CHARINDEX(“&”,账号)为0时,则替换(账号,&,“”)
当CHARINDEX(',',账号)为0时,则替换(账号,',','')
ELSE DD_行结束为字符(8))
)
)
复制和粘贴使我陷入困境。xD找到了一种删除所有非Alpha和无空格的好方法,可能对其他人有用。创建下面的函数,然后使用它:dbo.removenonalpharacters(交易名称) 如果对象ID(N'dbo.removenonalpharacters',N'FN')不为空
删除函数删除字符
go
创建函数[dbo]。[RemovenonalPharacters](@Temp VarChar(1000))
返回VarChar(1000)
作为
开始
结束
去
信用卡,G马斯特罗斯为什么账户号码有数字以外的东西?它不应该被命名为ACCOUNT\u NUMBER\u ID或其他什么吗?当您将其标记为时,您一定收到了警告。为什么不按照建议添加您正在使用的RDBMS或SQL风格的标记?看起来像是Microsoft SQL Server什么不起作用?您的输入看起来像什么,您的预期和当前输出是什么?您可以提供一个感谢的信息,我得到的这个配置错误是“消息207,16级,状态1,第14行无效列名'DD_行'。”我试图调用输出DD_行,这是每个输出行的一个文本字符串。呃,对不起,有点像SQL的新手,味道?嗯。。。可能是弄错了,但我猜这个查询不起作用有几个原因:首先,您使用sort_代码将大量字符合并在一起,并将结果与单个字符进行比较!?此外,您将DD_行放在ELSE中,因此这需要在源代码中实际存在DD_行列。如果此列未显示,您将收到“invalid column”错误。除非您也将相应的字符放入替换中(而不是每次使用“.”)。;-)@雷内哈哈#我调整了这个例子。非常感谢您对我第一个问题的热情帮助。我将尝试解决方案。
Declare @KeepValues as varchar(50)
Set @KeepValues = '%[^a-z ]%'
While PatIndex(@KeepValues, @Temp) > 0
Set @Temp = Stuff(@Temp, PatIndex(@KeepValues, @Temp), 1, '')
Return @Temp