sql - 如何在 MS Access 中检测号码并拆分?

标签 sql string ms-access

我目前无法控制这些情况,所以请耐心等待。

我从名为 EMAIL_O 的字段中提取电子邮件地址,有时它们是完全有效的 ( [email protected] ),而有时它们会附加 12 个字符的电话号码在前面( [email protected] )。

如何在 MS Access 中检测我看到的字段类型并在提取此数据时适当删除电话号码?我不能只从第 13 个字符中获取 mid(),因为如果电子邮件有效,我就会删除好的字符。

因此,我需要以某种方式检测数字的存在,然后应用 mid(),或者如果不存在数字,则仅获取完整字段。

最佳答案

使用模式匹配来检查 EMAIL_O 是否以电话号码开头。

EMAIL_O = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="152427263821202338222d2c25667a78707b74787055717a78747c7b3b767a78" rel="noreferrer noopener nofollow">[email protected]</a>"
? EMAIL_O Like "###-###-####*"
True

EMAIL_O = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="10637f7d757e717d7550747f7d71797e3e737f7d" rel="noreferrer noopener nofollow">[email protected]</a>"
? EMAIL_O Like "###-###-####*"
False

因此您可以在 IIf 表达式中使用该策略。当 EMAIL_O 与模式匹配时应用 Mid。否则,只需返回 EMAIL_O 不变。

? IIf(EMAIL_O Like "###-###-####*", Mid(EMAIL_O, 13), EMAIL_O)
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e89b87858d8689858da88c8785898186c68b8785" rel="noreferrer noopener nofollow">[email protected]</a>

这些是从“立即”窗口复制的示例。如果您想在查询中使用相同的方法...

SELECT IIf(EMAIL_O Like "###-###-####*", Mid(EMAIL_O, 13), EMAIL_O) AS email
FROM YourTable;

关于sql - 如何在 MS Access 中检测号码并拆分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30623033/

相关文章:

javascript - 如何在更少的 SQL 查询中执行复杂的 API 授权?

c# - 将 Null 值插入到 SQL 表中

c# - 向存储过程添加新参数

sql - 如何将数据聚合到范围(分桶)?

python - 属性错误: 'tuple' object has no attribute 'replace' For brackets

SQL:Not Like 产生的结果与 Like 的相反结果不同

ruby - 这个计算元音的 Ruby 程序有什么问题?

java - mirrorEnds 谜题没有给出任何错误线索

sql - Access 更新到今天的日期

c++ - 无法连接到 Microsoft Access 数据库 (C++)