Уважаемые эксперты, я готовил отчет SQL для отображения данных с проверками Format_Check с использованием CASE. Я привел пример, проблемы и ожидания ниже:
Структура таблицы: введите описание изображения здесь
SQL Заявление:
SELECT
ID,PRODUCT,COMMENTS
CASE WHEN SUBSTR(COMMENTS,1,35)=REGEXP_SUBSTR (COMMENTS,'(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\s)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\s)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\s)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)',1,1)
AND
LENGTH(TRIM(REGEXP_SUBSTR (COMMENTS, '(\S*)(\s)', 1, 2)))=8
AND
REGEXP_LIKE(TRIM(REGEXP_SUBSTR (COMMENTS, '(\S*)(\s)', 1, 1)),'(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)')
THEN 'Correct Format'
ELSE 'Incorrect_Format'
END AS Format_Check
FROM TEST_TABLE
SQL Выход: введите описание изображения здесь
SQL Объяснение вывода :
Проверяет, является ли столбец КОММЕНТАРИИ длиной 35 символов, также проверяет номера форматов и пробелы. SUBSTR (КОММЕНТАРИИ, 1,35) = REGEXP_SUBSTR (КОММЕНТАРИИ, '(\ d) (\ d) (\ d) (\ d) (\ d) (\ d) (\ d) (\ d) (\ s) (\ г) (\ г) (\ г) (\ г) (\ г) (\ г) (\ г) (\ г) (\ s) (\ г) (\ г) (\ г) (\ г) (\ г) (\ г) (\ г) (\ г) (\ s) (\ г) (\ г) (\ г) (\ г) (\ г) (\ г) (\ г) (\ d) ', 1,1)
Проверяет, является ли длина комментария после первого пробела длиной 8 символов (TRIM (REGEXP_SUBSTR (COMMENTS,' (\ S *) (\ s) ) ', 1, 2))) = 8
Проверяет, первые 8 символов - цифра / цифра. REGEXP_LIKE (TRIM (REGEXP_SUBSTR (КОММЕНТАРИИ, '(\ S *) (\ s)', 1, 1)), '(\ d) (\ d) (\ d) (\ d) (\ d) (\ d ) (\ d) (\ d) ')
Ожидание:
Мне нужен только «Неверный формат» «комментарии, которые будут отображаться при выполнении SQL, я не вижу sh, чтобы увидеть комментарии« Правильного формата ». Однако мне нужен ваш совет относительно того, будет ли этот случай использоваться с предложением WHERE, чтобы отображать только некорректные комментарии формата. Я сослался на предыдущие запросы, связанные с WHERE и CASE, однако я не могу понять, как передать мой случай в предложении WHERE. Спасибо за вашу помощь.