2013-03-02 8 views
1

Мне нужно запустить запрос, который будет извлекать информацию из поля, имеющего 2 типа данных.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; 

Возможно, вам нужно будет настроить имя функции «Найти» - я не уверен, что это то же самое в базе данных доступа.

+0

Доступ не поддерживает синтаксис CASE. – Yawar

1

Вот запрос, который извлекает два различных поля:

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

Использование like в доступе немного отличается от других баз данных.

Я предлагаю вам создать представление с помощью этой логики. Если вы действительно хотите изменить таблицу, вам придется добавлять столбцы и заполнять их логикой, как указано выше.

0

Если у вас есть адрес улицы, а затем адрес электронной почты в том же поле, и вы хотите разбить их, используйте это.
Мы будем называть ваше исходное поле Addy, и новые поля Улица & Электронная почта.

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 шаблоны значений.

Смежные вопросы