我需要运行一个查询,该查询将从具有 2 种数据类型的字段中提取信息。
字段为地址,数据为 123 大道,bb@yahoo.com。
我需要创建 2 个字段,一个用于电子邮件,一个 STaddress 来自表客户和字段地址?
任何人都可以帮助.. 它的访问和 vb 查询
我想到了这个
选择customer.address from customer where address like " @ "
但我仍然需要将地址字段的数据显示到 2 个不同的字段...
根据这个问题和您的重复问题,我了解您的表格有一个包含街道地址和电子邮件地址的字段,您希望将它们拆分为单独的字段。
所以你的桌子包括这个......
YourField
------------------------------
1234 ave willie haha@yahoo.com
123 avenue bb@yahoo.com
而你想要这个...
YourField street_address email_address
------------------------------ --------------- --------------
1234 ave willie haha@yahoo.com 1234 ave willie haha@yahoo.com
123 avenue bb@yahoo.com 123 avenue bb@yahoo.com
如果正确,您可以使用该InstrRev()
函数来确定最后一个空格在YourField
. 最后一个空格之前的所有内容都是街道地址;之后的所有内容都是电子邮件地址。
SELECT
y.YourField,
Left(y.YourField, InstrRev(y.YourField, ' ') -1) AS street_address,
Mid(y.YourField, InstrRev(y.YourField, ' ') +1) AS email_address
FROM YourTable AS y;
您可能需要添加一个WHERE
子句以确保查询仅尝试评估包含您的预期YourField
值模式的行。
这是获取两个不同字段的查询:
select iif(field like '*@*', field, NULL) as email,
iif(field like '*@*, NULL, field) as address
from t
在 Access 中的使用like
与其他数据库有点不同。
我建议您使用此逻辑创建一个视图。如果您真的想修改表格,则必须添加列并使用上述逻辑填充它们。
如果您在同一字段中有街道地址和电子邮件地址,并且想要拆分它们,请使用此地址。
我们会将您的原始字段称为 Addy,并将新字段称为 Street & Email。
SELECT Left(Addy, InStrRev(Addy, " ", InStr(Addy, "@")) - 1) AS Street, mid(Addy, InStrRev(Addy, " ", InStr(Addy, "@")) + 1) AS Email.
它的作用是查找@,然后向后查找第一个空格。第一个函数占据该空间的每个左侧并称之为 Street,而第二个函数占据右侧的所有空间。
该函数实际上是嵌套在一起的 3 个函数。为了真正了解它在做什么,我将对其进行剖析。
I = InStr(Addy, "@")
J = InStrRev(Addy, " ", I)
Street = Left(Addy,J-1)
尝试这样的事情:
select *,
(case locate('@', address) when 0 then null else address) as email,
(case locate('@', address) when 0 then address else null) as street
from table;
您可能需要调整“定位”功能的名称 - 我不确定它在访问数据库中是否相同。