Разбор строки Microsoft Access - PullRequest
1 голос
/ 17 апреля 2009

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

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

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

Ответы [ 4 ]

3 голосов
/ 17 апреля 2009

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

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;

Удачи!

1 голос
/ 17 апреля 2009

Будет ли у вас когда-либо менее 3 предметов в каждом столбце?

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

Value1 decimal
Value2 decimal
Value3 decimal
Value4 decimal (NULLABLE)

но это немного не относится к делу ...

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

0 голосов
/ 20 апреля 2009

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

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

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

0 голосов
/ 17 апреля 2009

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

right(yourColumnNam, inStrRev(yourColumnName, '-'))
...