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

Sql 从超过一定长度的字符串中删除空格,sql,sql-server-2008,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个字符,

我的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个限制的情况下

有没有一种简单的方法可以在不使用多个used of
子字符串
CHARINDEX
CASE
的情况下执行此操作


任何帮助都将不胜感激。

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

 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

我认为变量名本身非常简单。

不,没有简单的方法。你必须做这项工作。我建议您阅读如何编写T-SQL语句。文件夹路径是存储在单个VARCHAR中,还是表中的每个文件夹名称都位于单独的行中?您好,Tomalak,每行显示一个文件夹路径,因此某些行最多可以有10个文件夹名称。删除空格后,您不再指向正确的文件夹。这是一个问题吗?如果您想在T-SQL中实现这一点,这意味着要做很多工作。您需要在反斜杠处将每个路径拆分为可变数量的部分,查看每个部分,应用替换逻辑,从部分构建路径,更新行。在SQL语句中很难做到这一点(从技术上讲,这是可能的,但既不漂亮也不快速),在SQL Server之外使用一种更适合这种工作的编程语言来实现这一点会更好。(可能您的应用程序应该在首先插入值之前执行此操作。)