IIf запрос десятичного удаления - PullRequest
0 голосов
/ 06 марта 2020

Попытка выполнить следующее в MS Access.

Преобразовать данные в одном поле в число 18 di git, начинающееся с 01 в другом поле.

Есть также некоторые условия, которые должны быть выполнены:

  • первый da sh должен стать двойными нулями
  • второй da sh должен быть удален
  • третий и четвертый da sh должен быть один ноль
  • десятичное число также должно быть заменено на ноль

Мой запрос работает нормально, пока десятичное число не станет 15-м символом в данные.

Вот запрос:

SELECT MasterVacant.ParcelIdNumber,
    "01" + Mid([ParcelIdNumber],1,2) + "00" + Mid([ParcelIdNumber],4,2) + Mid([ParcelIdNumber],7,1)
        + IIf(Mid([ParcelIDNumber],11,1) = "", "0"+Mid([ParcelIDNumber],9,2), Mid([ParcelIDNumber],9,3))
        + IIf(Mid([ParcelIDNumber],14,1) = ".", "0"+Mid([ParcelIDNumber],12,2), Mid([ParcelIDNumber],12,3))
        + Mid([ParcelIDNumber],15,3) AS ParcelNumber
FROM MasterVacant;

Вот пример начала и окончания sh пример ...

'12-06-1-00-50.000-RR'  should become '011200061000050000'
'12-06-3-07-09.000-RR'  should become '011200063007009000'
'13-35-1-01-129.000-RR' should become '011300035100112900'

Однако вместо получения «0113000351001129000» Я получаю «013000351001129.00».

Вопрос в том, как удалить десятичную дробь, если десятичная дробь является 15-м символом, как в третьем наборе примеров?

Я получаю данные в виде одного столбца. Некоторые из них ниже ....

1. 13-35-1-07-29.000-RR 
2. 13-35-1-01-112.000-RR (Removing the decimal when the data is like this is the issue)
3. 13-35-4-01-01.000-RR
4. 13-35-4-02-04.000-RR
5. 13-35-1-13-17.000-RR

Выходные данные для вышеуказанных данных должны быть

1. 011300351007029000
2. 011300351001112000
3. 011300354001001000
4. 011300354002004000
5. 011300351013017000

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Используйте пользовательскую функцию:

Public Function Make18(ByVal Value As String) As String

    Const Head  As String = "01"
    Const Tail  As String = "000"
    Const Lead  As String = "00"

    Dim Parts   As Variant
    Dim Part    As Integer
    Dim Result  As String

    Parts = Split(Split(Value, ".")(0), "-")

    For Part = LBound(Parts) To UBound(Parts)
        Select Case Part
            Case 0
                Parts(Part) = Head & Parts(Part)
            Case 1
                Parts(Part) = Lead & Parts(Part)
            Case 3, 4
                Parts(Part) = Right(Lead & Parts(Part), 3)
        End Select
    Next

    Result = Join(Parts, "") & Tail

    Make18 = Result

End Function

, и ваш запрос станет:

SELECT 
    MasterVacant.ParcelIdNumber,
    Make18([ParcelIdNumber]) AS ParcelNumber
FROM 
    MasterVacant;
0 голосов
/ 06 марта 2020

Я предполагаю, что вы имели в виду обратное, где:

12-06-1-00-50.000-RR should become 011200061000050000 
12-06-3-07-09.000-RR should become 011200063007009000 
13-35-1-01-129.000-RR should become 0113000351001129.00

Я бы порекомендовал REPLACE() в MSACCESS, чтобы убрать штрихи. Как только вы разберетесь с черточками, вы можете MID()

К сожалению, ваш попытанный код делает что-то другое с 3-й строкой, потому что вставляются 3 нуля, когда, по моему мнению, должно быть только два нуля.

Попробуйте в текстовом поле:

=Replace("13-35-1-01-129.000-RR","-","")

вернет 1335101129.000RR и посмотрите, поможет ли это вам в создании кода.

Возможно go на шаг вперед и поместите его в функцию.

...