我需要运行一个查询,该查询将从具有两种数据类型的字段中获取信息。sql从字段创建一个字段
字段是地址,并有123条道路作为数据和[email protected]。
我需要为表格客户和字段地址创建2个字段一个用于电子邮件和一个STaddress?
任何人都可以我阿西斯.. 其访问和VB查询
我想从客户这个
选择customer.address的地方解决诸如 “@”
但我仍然需要将地址字段的数据显示为2个不同的字段...
我需要运行一个查询,该查询将从具有两种数据类型的字段中获取信息。sql从字段创建一个字段
字段是地址,并有123条道路作为数据和[email protected]。
我需要为表格客户和字段地址创建2个字段一个用于电子邮件和一个STaddress?
任何人都可以我阿西斯.. 其访问和VB查询
我想从客户这个
选择customer.address的地方解决诸如 “@”
但我仍然需要将地址字段的数据显示为2个不同的字段...
尝试类似这样:
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”函数的名称 - 我不确定它是否在访问数据库中相同。
这里是取两个不同领域的查询:
select iif(field like '*@*', field, NULL) as email,
iif(field like '*@*, NULL, field) as address
from t
的like
在Access中的使用是从其他数据库有点不同。
我建议你用这个逻辑创建一个视图。如果你真的想修改表格,你将不得不添加列并用上面的逻辑填充它们。
如果您有一个街道地址,然后在同一个字段中的电子邮件地址,并且想要拆分它们,然后使用它。
我们会将您的原始字段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)
基于此问题,您的重复的问题,我理解你的表中有一个字段包括既街道地址和电子邮件地址,并要分割那些为独立的领域。
所以,你的表包括此...
YourField
------------------------------
1234 ave willie [email protected]
123 avenue [email protected]
而你要这个......
YourField street_address email_address
------------------------------ --------------- --------------
1234 ave willie [email protected] 1234 ave willie [email protected]
123 avenue [email protected] 123 avenue [email protected]
如果这是正确的,你可以使用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
值模式。
访问不支持CASE语法。 – Yawar 2013-03-03 00:02:17