3

如果有公寓号码,我需要搜索地址字段并将一个字符更改为大写。因此,“521 Main St. #3b”将更改为“521 Main St. #3B”。

我知道这样做的方法是编写一个循环遍历记录集的程序,查看最后一个字符的地址字段以查看它是否是字母,然后如果它之前的字符是数字,则更改大小写最后一个字符并更新记录。

使用正则表达式(从未使用过)会更快/更简单吗?如果是这样,这最好是在编程环境中完成还是使用 Textmate 或 vi 等文本编辑器完成?数据在 MySQL 和 Excel 中,但我可以将其导出到文本文件。

谢谢。

4

2 回答 2

3

我使用 TextMate 解决了这个问题,一旦我开始了解一点正则表达式,它就很简单。(此处详细介绍了将 TextMate 中的最后一个字符变为大写的 Regex Syntax

不过,我想知道 sed 或 awk 之类的东西(我开始尝试)是否可能是一个更好的工具。并且 Olexa 提供的 SQL 解决方案有效。我只是不知道如何将其应用于整个记录集。

于 2013-06-05T19:48:45.237 回答
2

如果数据存储在 MySQL 中,那么最好在那里处理它:

UPDATE  addresses
  SET   address = CONCAT(LEFT(address, CHAR_LENGTH(address) - 1), UPPER(RIGHT(address, 1)))
  WHERE address REGEXP BINARY '#[[:digit:]]+[[:lower:]]{1}$'
;

我添加了BINARY因为 elseREGEXP不区分大小写,但BINARY可能需要省略以支持多字节字符串。在这种情况下,将进行多余的更新,但无论如何结果都是正确的。

PS 一个关于 SQL Fiddle 的示例,显示哪些值受到影响,以及它们是如何受到影响的:http ://sqlfiddle.com/#!2/b29326/1

于 2013-06-04T10:14:19.180 回答