【问题标题】:Trimming any Leading or trailing characters修剪任何前导或尾随字符
【发布时间】:2018-07-23 17:46:03
【问题描述】:

我有一张表格,里面有一些原始数据。我的要求是修剪给定字符串列中的任何前导或尾随空格和运算符字符。运算符字符的示例包括+ - . > < = : ;"

例子:

+Payment 应修剪为 Payment
->300 Write 应修剪为 300 Write

【问题讨论】:

  • 您的操作员字符列表是否详尽(或者您有详尽的列表)?什么版本的 SQL Server?
  • 修剪减号?似乎有点奇怪。 “-12 度” -> “12 度”。
  • @Larnu 我正在使用 SQL Server 2014。是的。该列表是详尽的(+、-、.、>、
  • @jarlh 提出了一个很好的观点。认为我们可能需要稍微大一点的范围,或者这可能是一个“xy 问题”。
  • @jarlh 同意。但这是一个要求。

标签: sql sql-server tsql sql-server-2014


【解决方案1】:

你可以试试这个:

DECLARE @tbl TABLE(YourString VARCHAR(100));
INSERT INTO @tbl VALUES('+Payment'),('->300 Write'),('-:<Test,:%');

SELECT SUBSTRING(YourString,A.posFirst,A.posLast-A.posFirst+2)
FROM @tbl 
OUTER APPLY(SELECT PATINDEX('%[a-zA-Z0-9]%',YourString) AS posFirst
                  ,LEN(YourString)-PATINDEX('%[a-zA-Z0-9]%',REVERSE(YourString)) AS posLast) AS A

结果

Payment
300 Write
Test

您可以在模式中添加任何允许的字符...

【讨论】:

  • 看起来很有希望。测试一下。
  • 您标记 SQL 2014 的依据是什么?我从用户那里看不到任何东西。
  • 我只是错过了。不久前我投了你一票。
  • @Paparazzi 没问题 ;-) 顺便说一句:你是对的,你的回答在某种程度上是有帮助的,至少它告诉我们这个有前途的新功能 :-D 仍然与其说是评论,不如说是评论回答虽然。编码快乐!
【解决方案2】:

尝试使用 PATINDEX

;WITH CTE
AS
(
    SELECT
       Val = '+Payment'
    UNION
    SELECT
       ' 300 Write'
)
SELECT
    *,
    NewVal = RTRIM(LTRIM(SUBSTRING(Val,PATINDEX('%[A-Z0-9]%',Val),LEN(Val))))
    FROM CTE

【讨论】:

    【解决方案3】:

    你是什么版本。 Trim 会在 2017 版本上做字符。

    Trim

    TRIM ([ characters FROM ] string )

    【讨论】:

    • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
    • @cjm 这怎么不是答案?这是一个完全符合 OP 要求的功能。当我回答时,版本没有被标记。这个答案对 2017 年或以后的用户可能很有价值。
    猜你喜欢
    • 2014-10-30
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 2011-01-16
    • 2011-06-03
    • 1970-01-01
    • 2015-08-01
    • 2017-04-22
    相关资源
    最近更新 更多