Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从SQL中的defind字符串输出中去掉非标准字符_Sql Server - Fatal编程技术网

Sql server 从SQL中的defind字符串输出中去掉非标准字符

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

我正在尝试从SQL中定义的字符串输出中去掉非标准字符,其中会有很多字符,因此我希望使用case而不是替换,但我无法使其工作。有什么建议吗

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