sql - 如何删除SQL中两个单词之间的空格(更多两个空格)

标签 sql sql-server t-sql

declare @var nvarchar(500)='Software    Development'
select @var as NotTrim
select LTRIM(RTRIM(@var)) as Trim

预期输出为“软件开发”(两个单词之间有一个单字)

enter image description here

最佳答案

尝试以下操作

SELECT
  s,
  LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(s,' ',' ^'),'^ ',''),'^','')))
FROM (SELECT '   Q  W       E   ' s) q

^ - 您可以使用字符串中未包含的任何符号。 这个方法是我在论坛 sql.ru 上找到的。

此方法将任意数量的空格替换为一个空格。这个方法我用过很多次,觉得效果很好。

你的例子

declare @var nvarchar(500)='Software    Development'
select @var as NotTrim
select LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(@var,' ',' ^'),'^ ',''),'^',''))) as Trim

您可以逐步了解它是如何工作的

SELECT
  s,
  -- step 1 - add special char before to each spaces
  REPLACE(s,' ',' ^'),
  -- step 2 - delete special char and space after this special char
  REPLACE(REPLACE(s,' ',' ^'),'^ ',''),
  -- step 3 - delete special chars
  REPLACE(REPLACE(REPLACE(s,' ',' ^'),'^ ',''),'^',''),
  -- step 4 - delete start and end spaces if you need it
  LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(s,' ',' ^'),'^ ',''),'^','')))
FROM (SELECT '   Q  W       E   ' s) q

关于sql - 如何删除SQL中两个单词之间的空格(更多两个空格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47427303/

相关文章:

asp.net - 使用 NHibernate 实现多语言域对象的最佳方法是什么?

sql - 不确定如何加入这两个表

sql - 在 SQL Server 查询结果中显示小计

sql - 如何在 SQL 中添加包含 ZScore 的新列

sql-server - SQL使用变量来改变列长度

sql - 列不存在于子查询表中,查询仍然运行良好,如何?

mysql - 使用时间维度的查询忽略 "where"子句中的条件

sql - 当我尝试连接到 Postgresql 数据库时,Leiningen/Clojure 表现得很奇怪

sql - 获取计数行的最后一个实例

sql - 如果值大于 SQL 中的先前值,则选择记录