2013-03-02 115 views
1

我需要运行一个查询,该查询将从具有两种数据类型的字段中获取信息。sql从字段创建一个字段

字段是地址,并有123条道路作为数据和[email protected]

我需要为表格客户和字段地址创建2个字段一个用于电子邮件和一个STaddress?

任何人都可以我阿西斯.. 其访问和VB查询

我想从客户这个

选择customer.address的地方解决诸如 “@

但我仍然需要将地址字段的数据显示为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”函数的名称 - 我不确定它是否在访问数据库中相同。

+0

访问不支持CASE语法。 – Yawar 2013-03-03 00:02:17

1

这里是取两个不同领域的查询:

select iif(field like '*@*', field, NULL) as email, 
     iif(field like '*@*, NULL, field) as address 
from t 

like在Access中的使用是从其他数据库有点不同。

我建议你用这个逻辑创建一个视图。如果你真的想修改表格,你将不得不添加列并用上面的逻辑填充它们。

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) 
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值模式。

相关问题