尝试为其他几个列的完整地址创建一个列,但在某些地址上遇到问题
Posted
技术标签:
【中文标题】尝试为其他几个列的完整地址创建一个列,但在某些地址上遇到问题【英文标题】:Trying to make a column for full addresses from several other columns, but having trouble with some addresses 【发布时间】:2021-05-13 17:30:21 【问题描述】:我有一个包含房屋号码、街道地址和邮政编码的数据集。我正在尝试创建另一列,其中将包括住房号码和街道地址。我正在处理大约 100,000 个数据点。我的大多数地址都很好,但似乎 TELEGRAPH St 最后有单元号,这是我不想要的。有没有办法让 SQL 删除所有街道地址末尾的数字,仅在 TELEGRAPH ST 上?例如,大多数街道都像“Main Street”或“Broadway”,但 Telegraph 有“Telegraph st 400”,但我希望它只是 Telegraph st。我在下面给出了我的部分代码,但它似乎不起作用:
Address_Line1=CASE WHEN street1 LIKE 'TELEGRAPH%' THEN (loadd1 + ' ' + REPLACE(street1, '[0-9]', '')) 当 street1 LIKE 'M %[0-9]%' OR street1 like 'US %[0-9]%' THEN (loadd1 + ' ' + CONCAT(street1, 'HWY')) ELSE loadd1+ ' ' +street1 END
我的代码的第二部分“WHEN street1 like 'M %[0-9]%'... 工作得很好,但是当我检查输出时,TELEGRAPH ST 最后仍然有单元号。
我也尝试过(非常糟糕)创建一个函数,但这也没有用。
创建函数 [dbo].NoNumbers(@x VARCHAR(MAX))
返回 VARCHAR(MAX)
开始
CASE WHEN @x LIKE '%[0-9]%'THEN SUBSTRING(@x,0,CHARINDEX('%[0-9]%',@x)) ELSE @x END
返回@x
结束
谢谢,非常感谢您的帮助!
**
**
【问题讨论】:
在提出问题时,您需要提供一个可重现的最小示例。请参考以下链接:***.com/help/minimal-reproducible-example 请提供以下内容: (1) DDL 和样本数据填充,即 CREATE table(s) 加上 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上面#1 中的样本数据。 (4) 你的 SQL Server 版本 (SELECT @@version;) this 能回答你的问题吗? 这能回答你的问题吗? Remove numbers from string sql server 我使用了下面@SubodhW 提供的解决方案。谢谢大家,您的时间! :) @Stu 是的,我认为这也可以,谢谢! 【参考方案1】:表达式REPLACE(street1, '[0-9]', '')
不能替换数字。您可以创建以下函数,然后使用like
WHEN street1 LIKE 'TELEGRAPH%' THEN (loadd1 + ' ' + dbo.RemoveNumbers(street1))
功能:
Create Function [dbo].[RemoveNumbers](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin
Declare @RemoveValues as varchar(50)
Set @RemoveValues = '%[0-9]%'
While PatIndex(@RemoveValues, @Temp) > 0
Set @Temp = Stuff(@Temp, PatIndex(@RemoveValues, @Temp), 1, '')
Return @Temp
End
Reference-
【讨论】:
@Ntsher 如果此答案解决了您的问题,正确的做法是将其标记为这样。 @SM我不知道我们必须这样做。谢谢你告诉我!以上是关于尝试为其他几个列的完整地址创建一个列,但在某些地址上遇到问题的主要内容,如果未能解决你的问题,请参考以下文章