从一定长度的字符串中删除空格

时间:2016-03-15 16:17:06

标签: sql sql-server-2008

我的SQL Server数据库中有一列确定了一组文件的文件夹结构。例如,列将显示以下内容:

\(folder 1)\(folder 2)\(folder3)\
\(folder 1)\(folder 2)\(folder3)\(folder 4)
\(folder 1)\(folder 2)\

问题是单个文件夹名称的长度不得超过50个字符。如果是,我想删除该文件夹中的所有空格(但仅限于该文件夹)。

因此,如果在第一个示例中,文件夹1和3的长度不超过50个字符,但文件夹2的长度超过50个字符,则文件夹1和3将保持不变,文件夹2将删除空格。

这是我目前的优先事项,但如果可能的话,我想删除' - '和'_',但仅限于删除空格不足以将字符数降低到50限制的情况。

是否有一种简单的方法可以在不使用SUBSTRINGCHARINDEXCASE多次使用的情况下执行此操作?

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

我提出了以下代码,我认为应该可以解决您的问题。如果您有任何疑问,请与我联系

 DECLARE @InputString NVARCHAR(300) = 'Hello\Hello World\He He'
 DECLARE @FolderName NVARCHAR(255)
 DECLARE @pos INT
 DECLARE @UpdatedString NVARCHAR(300) = '' 
 DECLARE @Size INT = 50

 SET @InputString = CONCAT(@InputString, '\')
 WHILE CHARINDEX('\', @InputString) > 0
 BEGIN
  SELECT @pos  = CHARINDEX('\', @InputString)  
  SELECT @FolderName = SUBSTRING(@InputString, 1, @pos-1)

  IF(LEN(@FolderName) > @Size)
  BEGIN
    SET @FolderName = REPLACE(@FolderName, ' ', '')
  END

  SET @UpdatedString = CONCAT(@UpdatedString, @FolderName, '\')

  SET @InputString = SUBSTRING(@InputString, @pos+1, LEN(@InputString)-@pos)
 END

 Set @UpdatedString = SUBSTRING(@UpdatedString, 0, LEN(@UpdatedString))

 SELECT @UpdatedString

我认为变量名称本身就很简单。