我需要运行一个查询,该查询将从包含两种类型数据的字段中提取信息。
字段是地址,有123个大道作为数据和bb@yahoo.com。
我需要为电子邮件创建两个字段,从表客户和字段地址创建一个STaddress吗?
任何人都可以帮助.. 它的访问和vb查询
我想到了这个
从客户处选择customer.address,其地址如“ @ ”
但我仍然需要将地址字段的数据显示到2个不同的字段......
答案 0 :(得分:1)
以下是获取两个不同字段的查询:
select iif(field like '*@*', field, NULL) as email,
iif(field like '*@*, NULL, field) as address
from t
Access中like
的使用与其他数据库略有不同。
我建议您使用此逻辑创建视图。如果您确实想要修改表,则必须添加列并使用上述逻辑填充它们。
答案 1 :(得分:1)
根据此问题和您的重复问题,我了解您的表格中包含两者街道地址和电子邮件地址的字段,您希望将这些字段拆分为单独的字段。
所以你的表包括这个...
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
值模式的行。
答案 2 :(得分:0)
尝试这样的事情:
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;
您可能需要调整“locate”功能的名称 - 我不确定它在访问数据库中是否相同。
答案 3 :(得分:0)
如果您在同一个字段中有街道地址,然后是电子邮件地址,并想要拆分它们,请使用此。
我们会将您的原始字段称为Addy,以及新字段Street&电子邮件。
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)