MYSQL WORKBENCH:从列中分离最后两个字符



我试图从列中删除最后两个字符。我所瞄准的当前列已经通过分隔字符串创建了,但是正如您将在下面看到的,对于'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来处理大多数情况。但是,如果准确性是您的首要任务,我建议您对数据进行地理编码。

相关内容

  • 没有找到相关文章