使用sql server查询以删除字符串中间的尾部或前导空格

时间:2018-11-16 18:54:31

标签: sql sql-server tsql trim sql-server-2017

我有一列数据如下-
BEFORE

我想删除数据中“-”字符的第一个实例之前和之后的所有[空格],以便获得以下已清理的数据-

AFTER

如何将其编写为SQL查询?

2 个答案:

答案 0 :(得分:0)

尝试这个

CREATE TABLE Spaces(
  Value VARCHAR(45)
);

INSERT INTO Spaces VALUES
('B2555 - 30...'),
('Babc30 - 40 ...'),
('B5- 50..'),
('B6AfG066ML -60..');


SELECT CASE WHEN CHARINDEX(' -', Value) > 0 THEN
            STUFF(Value, CHARINDEX(' -', Value), 1, '')
            ELSE
            Value
            End Result
FROM
    (
      SELECT CASE WHEN CHARINDEX('- ', Value) > 0 THEN
                  STUFF(Value, CHARINDEX('- ', Value) + 1, 1, '')
                  ELSE
                  Value
                  End Value
      FROM
          (
            SELECT CASE WHEN CHARINDEX(' - ', Value) > 0 THEN
                        STUFF(Value, CHARINDEX(' - ', Value), 1, '')
                        ELSE
                        Value
                        End Value
            FROM Spaces
          ) T1
    ) T2;

返回:

+------------------------+
|         Result         |
+------------------------+
| B2555-30- ABC - ABC... |
| Babc30-40 ...          |
| B5-50..                |
| B6AfG066ML-60..        |
+------------------------+

Demo

答案 1 :(得分:0)

这是您的另一选择。

这是假定以下条件:

  • 仅删除第一个'-'周围的借贷或尾随空格,否则将保留所有其他空格。
  • 仅占1个,并且仅占1个前导或尾随空格。
  • 可能已经“清除”了数据。

尝试一下:

DECLARE @TestData TABLE
    (
        [StringData] NVARCHAR(100)
    );


INSERT INTO @TestData (
                          [StringData]
                      )
VALUES ( 'ADFADSF- ASDFSADF - Q343243498' )
     , ( 'ABC - EFSSADF - 2345234532' )
     , ( 'EFGSADFSA -ASDFSADF - 2342345234' )
     , ( 'ASDF34 - ASDLFASDJF - 234234 - 34324' )
     , ( 'ABC-123 - 465 - 685' );

SELECT *
     , STUFF([StringData]
              , CHARINDEX('-', [StringData]) - 1
              , 3
              , REPLACE(SUBSTRING([StringData], CHARINDEX('-', [StringData]) - 1, 3), ' ', '')
            ) AS [CleanStringData]
FROM   @TestData;

基本上,这是将'-'之前的第一个字符删除为一个后一个字符,将其替换为那些相同的字符,但如果存在则删除空格。