【问题标题】:Replace %20 string in URL with Underscore using SQL Server Database Table使用 SQL Server 数据库表将 URL 中的 %20 字符串替换为下划线
【发布时间】:2017-10-17 16:47:29
【问题描述】:

我的 SQl Server DB 表中有一个列,其中包含字符串中带有 %20 的 URL。 我正在尝试用下划线“_”替换 %20。 每个 URL 在某一点上都是不同的。大约有 1500 条记录需要更新。我想使用此更新对所有记录进行批量更新。

但是查询成功,数据库中没有任何变化。也许是因为 Rollback 语句?

这是我的 SQL 代码:

Begin Try


    declare @newStringCount as int;
    declare @oldString as nvarchar(MAX);
    declare @newString as nvarchar(MAX);
    declare @stringToReplace as nvarchar(MAX);  
    set @stringToReplace = (SELECT resourceurl FROM [dbo].[ContentResourceBak2] where resourceurl like '%%20%');
    Set @oldString = '%20';
    Set @newString = '_';


  Update [dbo].[ContentResourceBak2] 
  Set resourceurl = REPLACE(@stringToReplace, @oldString, @newString)  


  Commit
  End Try
  Begin Catch

  set @newStringCount = (SELECT count (resourceurl) FROM [dbo].[ContentResourceBak2] where resourceurl like  '%%20%');
  if @newStringCount > 0
  RollBack

  END Catch

所有 1500 条记录仍包含 %20 和 NO 下划线。 **更新:我用下划线替换 %20 的原因是因为 URL 映射到 blob 存储中每个单词之间有 _ 的文件。

【问题讨论】:

  • 为什么下划线而不是空格? %20 是空格的占位符。下划线为%5F
  • 可能他们改变了网址在网站上的工作方式,现在他们需要更新数据库以匹配。

标签: sql sql-server replace rollback


【解决方案1】:
set @stringToReplace = (SELECT resourceurl FROM [dbo].[ContentResourceBak2] where resourceurl like '%[%]20%');

但是要小心这个:

Update [dbo].[ContentResourceBak2] 
Set resourceurl = REPLACE(@stringToReplace, @oldString, @newString)  

该 UPDATE 语句没有 WHERE 条件。它将更改表中的每一行。
如果您在生产环境中对此进行了测试,您可能只是破坏了您的数据。现在每条记录在resourceurl 列中都有相同值,修复它的唯一方法是从备份中恢复。

你可能想要这个:

UPDATE[dbo].[ContentResourceBak2] 
SET resourceurl = REPLACE(resourceurl, @oldString, @newString)  
WHERE resourceurl like '%[%]20%';

最后,%20 是空格字符的代码。如果您想忠实于您的数据,那么这里的空间可能会更好。如果 URL 需要下划线,它会使用 %5F。坚持使用空格意味着客户端代码可以再次对字符串进行 URL 编码并获得正确的结果。这让我想知道您是否最好保留原始数据,并根据需要让客户端代码 URL 解码。 %20 不是您最终可以使用的唯一十六进制字符。

【讨论】:

  • 最后我怀疑是否有充分的理由进行更换。我有一种强烈的预感,即 OP 可能正在尝试使用 URL 解析器以外的东西解析 URL 字符串,该解析器在 %20 处分崩离析。它将在下一个编码字符处再次崩溃。
猜你喜欢
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 2022-01-03
  • 2013-12-04
  • 2012-09-15
  • 1970-01-01
相关资源
最近更新 更多