我的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限制的情况。
是否有一种简单的方法可以在不使用SUBSTRING
,CHARINDEX
和CASE
多次使用的情况下执行此操作?
任何帮助都将受到高度赞赏。
答案 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
我认为变量名称本身就很简单。