从Oracle字符串中删除特殊字符

时间:2014-08-15 15:30:26

标签: sql regex oracle11g

在Oracle 11g数据库中,使用SQL,我需要从字符串中删除以下特殊字符序列,即

~!@#$%^&*()_+=\{}[]:”;’<,>./?

如果字符串中存在任何这些字符,除了这两个我不想删除的字符,即:"|""-",我希望它们完全删除。

例如:

发件人:'ABC(D E+FGH?/IJK LMN~OP'收件人:'ABCD EFGHIJK LMNOP'删除特殊字符后。

我尝试过这个适合这个样本的小测试,即:

select regexp_replace('abc+de)fg','\+|\)') from dual

但有没有更好的方法可以使用上面的特殊字符序列而不使用Oracle SQL为每个特殊字符执行'\+|\)'的字符串模式?

6 个答案:

答案 0 :(得分:5)

您可以使用空字符串

替换字母和空格以外的任何内容
[^a-zA-Z ]

这里是online demo


根据以下评论

  

我仍然需要在我的字符串中保留以下两个特殊字符,即&#34; |&#34;和&#34; - &#34;。

只需排除更多

[^a-zA-Z|-]

注意:连字符-应位于开头或结尾,或者像\-一样进行转义,因为它在Character类中具有特殊含义来定义范围。

有关Character Classes or Character Sets

的更多信息,请参阅

答案 1 :(得分:0)

请考虑使用此正则表达式替换:

REGEXP_REPLACE('abc+de)fg', '[~!@#$%^&*()_+=\\{}[\]:”;’<,>.\/?]', '')

替换将匹配列表中的任何字符。

这是regex demo

答案 2 :(得分:0)

匹配特殊字符序列的正则表达式是:

[]~!@#$%^&*()_+=\{}[:”;’<,>./?]+

答案 3 :(得分:0)

我觉得你还是错过了逃避所有正则表达式的特殊角色。 要实现这一点,请反复进行: 构建一个测试组并开始按字符构建你的正则表达式字符串,看它是否删除了你希望删除的内容。 如果最新的角色不起作用,你必须逃避它。 这应该可以解决问题。

答案 4 :(得分:0)

SELECT TRANSLATE('~!@#$%sdv^&*()_+=\dsv{}[]:”;’<,>dsvsdd./?', '~!@#$%^&*()_+=\{}[]:”;’<,>./?',' ')
FROM dual;

结果:

TRANSLATE
-------------
 sdvdsvdsvsdd

答案 5 :(得分:-1)

$GoodSyntax = "Select * From tableunknown"
$extractFile = "C:\Test.csv"
Execute-SQLquery 
if (Execute-SQLquery $GoodSyntax) 

Function Execute-SQLquery {
  param ($GoodSyntax)

$server = "Server01"
$database = "database01"    
$connectionTemplate = "Data Source={0};Integrated Security=SSPI;Initial Catalog={1};"
$connectionString = [string]::Format($connectionTemplate, $server, $database)
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$command = New-Object System.Data.SqlClient.SqlCommand
$command.CommandText = $QueryString
$command.Connection = $connection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $command
$DataSet = New-Object System.Data.DataSet
$rowCount = $SqlAdapter.Fill($DataSet)
    $DataSet.Tables[0] | Export-Csv $extractFile -NoTypeInformation

    $connection.Close()