从一组结果中删除标点符号

时间:2015-10-08 15:49:46

标签: sql-server-2014 trim

我的查询如下

select ContactName,Address, concat(City,' ', StateOrRegion,' ',PostalCode) as 'Region Info'
from Customers

结果在这里

Maria Anders    Obere Str. 57                     Berlin  12209
Ana Trujillo    Avda. de la Constitución 2222   México D.F.  05021
Antonio Moreno  Mataderos  2312                  México D.F.  05023
Thomas Hardy    120 Hanover Sq.                   London  WA1 1DP
Christina Berglund    Berguvsvägen  8                  Luleå  S-958 22            
Hanna Moos       Forsterstr. 57                     Mannheim  68306
Frédérique Citeaux  24, place Kléber           Strasbourg  67000
Martín Sommer   C/ Araquil, 67                 Madrid  28023
Laurence Lebihan    12, rue des Bouchers      Marseille  13008
Elizabeth Lincoln   23 Tsawassen Blvd.     Tsawassen BC T2F 8M4

我的问题是在地址字段中我可以删除标点符号而不创建表格,如果是,那么最好的方法是什么。会与Ltrim和rtrim合作吗?

1 个答案:

答案 0 :(得分:1)

如果您要删除一组有限的项目,只需使用REPLACE(x, y, z)用零长度字符串替换要删除的字符。 x是要搜索的字符串,y是要查找的字符串,z是要替换y的字符串。

一个例子:

DECLARE @a VARCHAR(50);
SET @a = 'This, is a test.';
SELECT REPLACE(REPLACE(@a, '.', ''), ',', '');

这将从字符串中删除逗号和句点。根据问题的规模,这可能会很好。

为什么不使用CONCAT()来连接值,而不是使用+

我将您的查询重写为:

SELECT c.ContactName
    , c.Address
    , [Region Info] = c.City + ' ' + c.StateOrRegion + ' ' + c.PostalCode
FROM dbo.Customers c;

您可能会注意到我已将查询中的关键字大写;这提供了一种很容易的方法,可以轻松地从列名和表名等中识别关键字。

此外,您还要显式指定架构;通常这是dbo。如果有人创建的新模式恰好包含一个与FROM子句中名称相同的表,那么这将使您的代码在将来不易受到问题的影响。

您还应养成为FROM子句中的项目指定别名的习惯,并在查询的其他部分中使用该别名。这使得调试变得更加简单。