Я получаю сообщение об ошибке «Неверный параметр длины, переданный в ПРАВУЮ функцию» на следующем SQL.Из того, что я вижу, это связано с функцией CHARINDEX.Это на SQL Server 2014. Как это можно исправить?
SELECT D.PAYER_TIN, '001', 13679089, YEAR( (CONVERT(CHAR(20),A.PYMNT_DT,121))),
D.PAYEE_TIN, A.VENDOR_ID, D.PAYEE_NAME1, D.PAYEE_NAME2, D.PAYEE_ADDRESS1,
LEFT(PAYEE_CITYSTZIP,CHARINDEX(',', PAYEE_CITYSTZIP)-1),
SUBSTRING(PAYEE_CITYSTZIP, CHARINDEX(',', PAYEE_CITYSTZIP)+2, 2),
RIGHT(PAYEE_CITYSTZIP, LEN(PAYEE_CITYSTZIP) - CHARINDEX(',', PAYEE_CITYSTZIP)-7),
D.WTHD_BOX1, D.WTHD_BOX2, D.WTHD_BOX7, D.WTHD_BOX18, 0.00
FROM PS_WTHD_TRXN_TBL A, PS_TMP_1099_COPYB D, PS_TMP_1099_PA_VW2 E
WHERE ( A.WTHD_TYPE = D.WTHD_TYPE
AND A.VENDOR_ID = D.VENDOR_ID
AND YEAR( A.PYMNT_DT) = '2018'
AND A.WTHD_CLASS IN ('01','02','07')
AND A.VENDOR_ID = E.VENDOR_ID
AND A.VNDR_LOC = E.VNDR_LOC
AND E.YEAR = '2018'
AND D.WTHD_CNTL_ID = 'WEST1'
AND D.WTHD_BOX18 > 0.00)
GROUP BY D.PAYER_TIN, YEAR( (CONVERT(CHAR(20),A.PYMNT_DT,121))), D.PAYEE_TIN, A.VENDOR_ID,
D.PAYEE_NAME1, D.PAYEE_NAME2, D.PAYEE_ADDRESS1, LEFT(PAYEE_CITYSTZIP,
CHARINDEX(',', PAYEE_CITYSTZIP)-1), SUBSTRING(PAYEE_CITYSTZIP,
CHARINDEX(',', PAYEE_CITYSTZIP)+2, 2), RIGHT(PAYEE_CITYSTZIP, LEN(PAYEE_CITYSTZIP) - CHARINDEX(',', PAYEE_CITYSTZIP)-7),
D.WTHD_BOX1, D.WTHD_BOX2, D.WTHD_BOX7, D.WTHD_BOX18
РЕДАКТИРОВАТЬ:
Добавлен следующий оператор case (в SELECT и GROUP BY), которыйкажется справиться с условием.Оказалось, что была одна строка, где в этом столбце есть только запятая (",") (неверный ввод данных пользователем / данными), поэтому вычитание 7 из 1 приведет к отрицательному числу, что приведет к ошибке.
CASE WHEN PAYEE_CITYSTZIP <> ',' THEN
RIGHT(PAYEE_CITYSTZIP, LEN(PAYEE_CITYSTZIP) - CHARINDEX(',', PAYEE_CITYSTZIP)-7)
ELSE RIGHT(PAYEE_CITYSTZIP, LEN(PAYEE_CITYSTZIP) - CHARINDEX(',', PAYEE_CITYSTZIP)+1) END AS ZIP