Uwe*_*eim 7 oracle sql-server plsql t-sql
将应用程序从 Oracle 移动到 SQL Server,我有这个伪 Oracle PL/SQL:
SELECT LTRIM(MyColumn, '-, ') FROM MyTable
Run Code Online (Sandbox Code Playgroud)
即我使用Oracle 的LTRIM第二个参数,指定要从字符串左侧修剪的字符。
不幸的是,T-SQL 版本LTRIM不允许我指定要修剪的字符。
目前,我对如何迁移它一无所知LTRIM。在阅读了MyColumn.
这对我来说看起来很不雅观。
我的问题:
是否有任何有意义的方法可以获得LTRIM类似 T-SQL 的功能来传递字符以修剪掉?
编辑1:
我需要替换-,,和从字符串的开头。
例如:
SELECT LTRIM(MyColumn, '-, ') FROM MyTable
Run Code Online (Sandbox Code Playgroud)
会导致
-----, ,,, This is ,- a test,---,
Run Code Online (Sandbox Code Playgroud)
编辑2:
我强烈希望这不是XY 问题。
也许重写我的整个查询会LTRIM完全消除对LTRIM.
嘻嘻。
DECLARE @MyTable TABLE ( MyColumn VARCHAR(100) );
INSERT @MyTable ( MyColumn )
VALUES ( '-----, ,,, This is ,- a test,---,' );
SELECT *,
SUBSTRING(mt.MyColumn, ca.p, LEN(mt.MyColumn))
FROM @MyTable AS mt
CROSS APPLY ( SELECT *
FROM (VALUES (PATINDEX ('%[^ ,-]%', MyColumn))
) AS x (p) ) AS ca;
Run Code Online (Sandbox Code Playgroud)
从第一个字符(不是空格、逗号或连字符)开始获取字符串的后缀:
declare @str varchar(100) = ' -----, ,,, This is ,- a test,---,'
select substring(@str,patindex('%[^ ,-]%',@str),len(@str))
Run Code Online (Sandbox Code Playgroud)
结果:
This is ,- a test,---,
Run Code Online (Sandbox Code Playgroud)
请注意,连字符是正则表达式中表示“范围”的特殊字符(例如[a-z]),因此必须是第一个 ( [^- ,]) 或最后一个 ( [^ ,-])。