在Oracle 11g数据库中,使用SQL,我需要从字符串中删除以下特殊字符序列,即
~!@#$%^&*()_+=\{}[]:”;’<,>./?
如果字符串中存在任何这些字符,除了这两个我不想删除的字符,即:"|"
和"-"
,我希望它们完全删除。
例如:
发件人:'ABC(D E+FGH?/IJK LMN~OP'
收件人:'ABCD EFGHIJK LMNOP'
删除特殊字符后。
我尝试过这个适合这个样本的小测试,即:
select regexp_replace('abc+de)fg','\+|\)') from dual
但有没有更好的方法可以使用上面的特殊字符序列而不使用Oracle SQL为每个特殊字符执行'\+|\)'
的字符串模式?
答案 0 :(得分:5)
您可以使用空字符串
替换字母和空格以外的任何内容[^a-zA-Z ]
这里是online demo
根据以下评论
我仍然需要在我的字符串中保留以下两个特殊字符,即&#34; |&#34;和&#34; - &#34;。
只需排除更多
[^a-zA-Z|-]
注意:连字符-
应位于开头或结尾,或者像\-
一样进行转义,因为它在Character类中具有特殊含义来定义范围。
答案 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()