SQL使用上多列的一个REPLACE
问题描述:
我有以下查询:SQL使用上多列的一个REPLACE
SELECT * FROM MailingList
大约有20多个列在邮件列表表,一个被称为地址。此列有一些包含逗号的字段,我需要将其删除。所以,我在我的查询更新为:
SELECT REPLACE(Address, ',', '') AS Address, * FROM MailingList
但现在我有两个地址列。有没有办法只显示一个地址列,而仍然使用通配符(*)为所有其他列?
答
没有办法做到这一点,尽管列出你想明确的列是一个好主意。
答
你就可以欺骗如下查询:
的cloumns
- 获取数据到一个临时表
- 丢弃不需要的
- 得到的结果和下降临时表
SELECT *, REPLACE(Address, ',', '') AS Address2
INTO #TempTable
FROM MailingList
ALTER TABLE #TempTable
DROP COLUMN [Address]
SELECT * FROM #TempTable
DROP TABLE #TempTable
答
我同意阴影 - 避免使用通配符*如果你能...
我知道列明所有列在大表的SELECT语句是一种痛苦所以这里是一个快速的捷径您可能不知道:在SQL Server Management Studio中,浏览对象资源管理器并找到要从中选择的表(MailingList)。右键单击它以查看上下文菜单并选择“Script Table as”,然后选择“”,然后选择“新建查询编辑器窗口”。这将创建一个新的select语句,并列出每个列。将来,使用此方法创建选择语句,查询,过程等,而不是*通配符。性能更好,它看起来更好:-)
然后,你可以用替换函数解决你的别名问题。
有没有理由不能称之为“AddressNoCommas”或类似的东西? –
最佳做法是避免选择*并选择您需要的列。 SSMS脚本轻松为您提供Sql查询。用*表示,否则不能有一个地址,但用正确的方式选择列可以。 – shadow
我经常希望这个,但它可能不是一个好主意......我所做的是使用SSMS,选择top 1000来生成我的选择列表并替换相关列。在你的情况下,用你的替换语句替换地址字段。至少可以保存所有的输入。如果你不喜欢这种格式,你可以创建一个存储过程来以你选择的格式返回选择列表。 –