sql从字段创建一个字段

时间:2013-03-02 22:07:30

标签: sql ms-access

我需要运行一个查询,该查询将从包含两种类型数据的字段中提取信息。

字段是地址,有123个大道作为数据和bb@yahoo.com。

我需要为电子邮件创建两个字段,从表客户和字段地址创建一个STaddress吗?

任何人都可以帮助.. 它的访问和vb查询

我想到了这个

从客户处选择customer.address,其地址如“ @

但我仍然需要将地址字段的数据显示到2个不同的字段......

4 个答案:

答案 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)