我的查询如下
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合作吗?
答案 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
子句中的项目指定别名的习惯,并在查询的其他部分中使用该别名。这使得调试变得更加简单。