将应用程序从 Oracle 迁移到 SQL Server,我有这个伪 Oracle PL/SQL:
SELECT LTRIM(MyColumn, '-, ') FROM MyTable
即我使用Oracle 的LTRIM
第二个参数,指定要从字符串左侧修剪的字符。
不幸的是,T-SQL 版本LTRIM
不允许我指定要修剪的字符。
目前,我对如何迁移它一无所知LTRIM
。在阅读MyColumn
.
这对我来说看起来很不雅观。
我的问题:
有什么有意义的方法可以让LTRIM
T-SQL 获得类似功能来传递要删除的字符吗?
编辑 1:
我需要从字符串的开头替换-
,,
和。
例如:
-----, ,,, This is ,- a test,---,
会导致
This is ,- a test,---,
编辑 2:
我强烈希望这不是XY 问题。
也许重写我的整个查询将完全消除对的需求LTRIM
,尽管我宁愿专注于尽可能将其移植为 1:1,然后质疑LTRIM
.
嘻嘻。
从第一个不是空格、逗号或连字符的字符开始获取字符串的后缀:
结果:
请注意连字符,因为它是正则表达式中的特殊字符,表示“范围”(例如
[a-z]
),所以必须是第一个 ([^- ,]
) 或最后一个 ([^ ,-]
)。与 Oracle 相比,我认为您不会对这个解决方案感到满意,
ltrim
但它可以满足您的需求。测试仪: http: //rextester.com/IXOL62563
不能说这是否是最佳解决方案,但这可以通过
SUBSTRING
、CHARINDEX
、LEFT
、LTRIM
和来实现REPLACE
。我假设您正在处理 8000 个或更少的字符。测试代码:
输出:
以下是对每个部分的解释。我在末尾添加了一个“Z”来处理字符串只有需要删除的字符的情况。首先删除所有逗号:
移除所有 -:
从左边删除填充的空格:
获取第一个不是空格、逗号或 - 的字符:
查找不是空格、逗号或 - 的第一个字符的位置:
从我们找到的位置开始获取子字符串: