2009-04-16 5 views
1

В MS Access 2003, у меня есть следующие значения в столбцеMicrosoft Access разборе

0-0-60 
20-0-0-24S 
20.5-0-0-24S 
32-0-0 

Как я могу написать мой запрос такого, что я могу вытащить 3-й элемент из колонки, например, «60» от «0-0-60». Имейте в виду, что я также получил 4-й столбец.

+0

Вы никогда не должны указывать значения mutliple в том же столбце. Это хорошо известный анти-образец. –

+1

Это замечательно Джоэл. Спасибо за ваш комментарий. Однако я не создал этот столбец, он был предоставлен мне кем-то другим. Я обязательно передам совет мудреца автору. – Robert4Real

ответ

3

вы хотите, чтобы обобщить эту функцию для разделителя и какой позиции, но:

Public Function SplitString(inputString As String) As String 
    Dim TestArray() As String 
    TestArray = Split(inputString, "-") 
    Debug.Print TestArray(2) 
    SplitString = TestArray(2) 
End Function 

Вы можете заехать в запросе, как это:

SELECT SplitString([MyField]) AS Expr1 
FROM MyTable; 

Good Luck!

+0

Вы также захотите дать ему лучшее имя и обработать ошибки - особенно «Подстрочный код вне диапазона». –

-1

Я считаю, что встроенное выражение, подобное этому в инструменте построения запроса, выполнит работу (непроверенная).

right(yourColumnNam, inStrRev(yourColumnName, '-')) 
+0

Это возвращает последнее значение, которое не будет работать, когда будет четыре значения. –

1

У вас будет менее 3 предметов в каждой колонке?

Действительно, если у вас есть очень определенный формат либо 3 знаков после запятой или 4 знаков после запятой в качестве значений, я бы рассмотреть вопрос об изменении вашей схемы для

Value1 decimal 
Value2 decimal 
Value3 decimal 
Value4 decimal (NULLABLE) 

, но это немного рядом с точкой ...

Если вы действительно застряли с этим, то его, вероятно, быстрее разобрать в коде, чем это сделать какую-то противную влево/вправо/Instr работы в Access SQL Query

+0

У меня будет как минимум 3 элемента. – Robert4Real

0

Тот факт, что вы находите его нетривиальным для запроса столбца данных, называется тем, что мы называем «запахом».

Это выглядит как нарушение первой нормальной формы (1NF), потому что у вас есть нескалярные данные в одном столбце. Надеюсь, вы разделите эти значения на одноразовое упражнение по очистке данных, чтобы устранить проблему раз и навсегда (в этом случае я лично использовал бы текст Excel в столбцах, если набор результатов был небольшим).

Если вы предлагаете сделать это в запросе для своего приложения, я предлагаю вам нормализовать норму и соответственно изменить схему.