有一个包含 varchar(100) - OrderNum 字段值的大表,如下所示:
“BO2003056-2”
需要从此字段中提取所有数字字符,以便后续连接到另一个表。
例如:“BO2003056-2”将转换为“20030562”
由于 TSQL 中本身不存在 RegEx,那么在 TSQL 中执行此操作的最快方法是什么?
SQL 2019(数据库兼容模式 2014)
像这样的事情,可能是:
with t (input) as (select 'BO2003056-2')
select
replace(
translate(
input,
'ABCDEFGHIJKLMNOPQRSTUVXYZ-',
' '
),
' ', ''
)
from t
Run Code Online (Sandbox Code Playgroud)
您必须亲自测试这是否是“最快的”,但这可能是最简单的方法。
请注意,在SQL Server 版本TRANSLATE()
中,第三个参数(替换字符串)的长度必须与第二个参数(要替换的字符)的长度相同。
您可以避免计算要删除的所有字符:
with t (input, unwanted) as (
select 'BO2003056-2', 'ABCDEFGHIJKLMNOPQRSTUVXYZ-'
)
select
replace(
translate(
input,
unwanted,
replicate(' ', len(unwanted))
),
' ', ''
)
from t
Run Code Online (Sandbox Code Playgroud)
在其他 DBMS 中,第三个参数可以更短,并且没有替换的字符将被简单地删除,从而使这种方法变得更加简单。例如,在 Postgres 中:
with t (s) as (select 'BO2003056-2')
select
translate(s, 'ABCDEFGHIJKLMNOPQRSTUVXYZ-', '')
from t
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2952 次 |
最近记录: |