如何将 LTRIM 从 Oracle 移植到 SQL Server?

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.

Eri*_*ing 6

嘻嘻。

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)


Dav*_*itz 4

从第一个字符(不是空格、逗号或连字符)开始获取字符串的后缀:

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]),因此必须是第一个 ( [^- ,]) 或最后一个 ( [^ ,-])。