如何在2017年之前修剪SQL Server中的字符串?

如何在2017年之前修剪SQL Server中的字符串?,sql,sql-server,trim,Sql,Sql Server,Trim,在SQL Server 2017中,您可以使用此语法,但不能在早期版本中使用: SELECT Name = TRIM(Name) FROM dbo.Customer; 要在右侧进行修剪,请使用: SELECT RTRIM(Names) FROM Customer 要在左侧进行修剪,请使用: SELECT LTRIM(Names) FROM Customer 要在两侧进行修剪,请使用: SELECT LTRIM(RTRIM(Names)) FROM Customer 我假设这是一次一次性的

在SQL Server 2017中,您可以使用此语法,但不能在早期版本中使用:

SELECT Name = TRIM(Name) FROM dbo.Customer;

要在右侧进行修剪,请使用:

SELECT RTRIM(Names) FROM Customer
要在左侧进行修剪,请使用:

SELECT LTRIM(Names) FROM Customer
要在两侧进行修剪,请使用:

SELECT LTRIM(RTRIM(Names)) FROM Customer

我假设这是一次一次性的数据清理练习。完成后,确保添加数据库约束以防止将来出现错误数据,例如

ALTER TABLE Customer ADD
   CONSTRAINT customer_names__whitespace
      CHECK (
             Names NOT LIKE ' %'
             AND Names NOT LIKE '% '
             AND Names NOT LIKE '%  %'
            );

还考虑禁用其他字符(选项卡、回车、换行等),这可能会导致问题。


现在也可以将这些名称拆分为
姓氏
,等等:)

在使用ssis表达式的sql server 2008 r2中,我们具有修剪功能

SQL Server集成服务(SSIS)是Microsoft SQL Server数据库软件的一个组件,可用于执行广泛的数据迁移任务

您可以在此链接上找到完整的说明

但该函数本身有一些限制,msdn在该页中也提到了这些限制。 但这是在sql server 2008 r2中

TRIM("   New York   ") .The return result is "New York".
“替换”的扩展版本:


要从字符串的开头和结尾修剪任何字符集,可以执行以下代码@TrimPattern定义要修剪的字符。在此示例中,将修剪空格、制表符、左前和右后字符:

声明@Test nvarchar(50)=Concat(“”,char(9),char(13),char(10),“”,Test’,“”,char(9),char(10),char(13),“”,Test’,“”,char(9),“”,char(9),char(13),“”)

声明@TrimPattern nvarchar(max)='%[^'+char(9)+char(13)+char(10)+']%


选择子字符串(@Test,PATINDEX(@TrimPattern,@Test),LEN(@Test)-PATINDEX(@TrimPattern,@Test)-PATINDEX(@TrimPattern,LTRIM(REVERSE(@Test))))+2)

顺便问一下,微软有什么可能的理由在没有修剪的情况下包含LTRIM和RTRIM函数?这很奇怪,因为它是多余的。您可以使用LTRIM(RTRIM(var))完成同样的事情。你可以说它们都是冗余的,因为TSQL有CHARINDEX和SUBSTRING,但这是一种愚蠢的看待它的方式。它一点都不冗余。不提供一个称为TRIM的函数会给用户带来语法负担。这可能是一个疏忽,或者是因为每个功能都从-100点开始而被取消的功能之一(这实际上只会导致不一致的功能集,而不是优先功能集,IMHO)。这是最简单的方法,只需记住将您的列别名为returned@Miles-为了完整性,我添加了别名。我知道这是使用修剪值的正确方法。但是,你能解释一下为什么在我们可以使用TRIM的情况下同时使用LTRIM和RTRIM吗?@CodeBuster:SQL Server没有定义TRIM函数,即使在2014版本中也是如此。SQL Server现在在2017版本中有TRIM。这与MS SQL无关,只是它位于与数据库捆绑的产品中。
TRIM("   New York   ") .The return result is "New York".
SELECT LTRIM(RTRIM(Replace(Replace(Replace(name,'   ',' '),CHAR(13), ' '),char(10), ' ')))
from author
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(RTRIM(LTRIM(REPLACE("Put in your Field name", ' ',' '))),'''',''), CHAR(9), ''), CHAR(10), ''), CHAR(13), ''), CHAR(160), '') [CorrValue]