我被赋予了一项艰巨的任务,即筛选超过30,000名注册人的数据库,并在需要时更正姓名和地址的字母大小写。我正在尝试编写一个程序,它将在我们的数据库中搜索全部小写或全部大写的名称和地址,并在网页中输出这些错误,以便我更有效地查看和更正。我被告知我可以利用正则表达式查找符合我标准的字段,只是我是编程新手,而且我不熟悉RegEx的语法。
如果有人可以提供一些关于如何使用RegEx查询这些不一致的指示,我们将不胜感激。
谢谢。
答案 0 :(得分:1)
strComp
应该有效
SELECT col
FROM table
WHERE strComp(col, lcase(col), 0) = 0 --all lower case
OR strComp(col, ucase(col), 0) = 0 --all upper case
前两个参数是要比较的列。第三个参数说要进行二进制比较。如果两个字符串相等则返回0。
答案 1 :(得分:0)
您如何准确更正数据?如果您看到姓氏" MACGUYVER"它应该改为Macguyver还是MacGuyver?如果你看到姓氏" DE LA HOYA"会变成德霍亚,德拉霍亚还是其他什么?这项任务似乎有点危险。
如果您的计划基本上只是初始化大写,那么我建议您在进行任何人工审核之前先运行更新。
您可以运行类似这样的内容,将您的姓名字段更改为首字母大写字母:
update yourTable
set lname = StrConv(lname,3)
where StrComp(lname, StrConv(lname,3), 0) <> 0
and StrComp(mid(lname,2,len(lname)), lcase(mid(lname,2,len(lname))), 0) = 0;
凡&#34; lname&#34;例如,上面是你的姓氏列。 必须为每个名称字段运行上述内容。
请注意,这不会更新合法拥有多个大写字母的名称,例如需要手动审核的MacGuyver或O&#39; Connor。 另请注意,将更新以van,von,de la和其他可能故意为小写的其他名字开头的姓氏。
然后,您可以查询需要手动审核的名称,我认为这些名称将是一个小得多的子集:
select *
from yourTable
where StrComp(lname, StrConv(lname,3), 0) <> 0;
地址更加艰难。要找到全部小写或全部大写的,您可以这样做:
select *
from yourTable
where strComp(address1, lcase(address1), 0) = 0;
select *
from yourTable
where strComp(address1, ucase(address1), 0) = 0;
显然,这不会引起诸如&#34; 123 New YORK AveNUE&#34;
之类的地址线。考虑要求允许将所有地址值设置为大写。
你可以省去很多麻烦。