我试图从列中删除最后两个字符。我所瞄准的当前列已经通过分隔字符串创建了,但是正如您将在下面看到的,对于'City'列,它没有成功。
原文如下:输入图片描述
这是我能够从我的代码中输出的内容:
| StreetNumber | Street | **City** | State |
|----------------------------------------------------------------------|
| 1808 | FOX CHASE DR | **GOODLETTSVILLE TN** | TN |
| 1832 | FOX CHASE DR | **GOODLETTSVILLE TN** | TN |
| 2005 | SADIE LN | **GOODLETTSVILLE TN** | TN |
实际图片:此处输入图片描述
这是我的代码:
select substring_index(substring_index(OwnerAddress, ' ', 1), ' ', -1) as StreetNumber,
substring(OwnerAddress, locate(' ', OwnerAddress),
(length(OwnerAddress) - (length(substring_index(OwnerAddress, ' ', 1))
+ length(substring_index(OwnerAddress, ' ', -2))))) as Street,
substring(substring_index(OwnerAddress, ' ', -2) from 1 for length(OwnerAddress)-2) as City,
substring_index(OwnerAddress, ' ', -1) as State
from nashhousing;
目标是从'City'列中删除州缩写,因为已经有了一个州列。我原以为最后两个字符可以是-2,但显然不行。我希望我已经把我的情况解释清楚了,如果没有,请让我知道。我不想放弃这种情况,但我已经在这个问题上花了5个小时,还是找不到解决方案。请帮忙,提前感谢!
要直接回答您的问题,您在城市字段上使用了SUBSTRING
的长度部分的错误字段和值。
这应该会纠正你的问题:
substring(substring_index(OwnerAddress, ' ', -2), 1, substring_index(OwnerAddress, ' ', -2) - 2) as City,
或者
substring_index(substring_index(OwnerAddress, ' ', -2), ' ', 1) as City
请注意:
这样做的主要问题是,您假设每个条目的格式相同,并且您没有考虑到具有两个名称的城市。如纽约、洛杉矶、旧金山等
这是你可能需要在MySQL之外解析的东西。由于您只需要对其进行解析,因此您可以编写足够体面的RegEx来处理大多数情况。但是,如果准确性是您的首要任务,我建议您对数据进行地理编码。