我需要过滤掉 SQL 表中的行,这些行在指定值列表中的一列中具有值。简化表如下所示:(抱歉格式错误,以前从未在此处发布过)
Error Codes | Other Column 1 | Other Column 2 ...
--------------------------------------------------
F010,F123,F345, | ...... | .....
F231,FC85,F904, | ...... | .....
FC432,F0425,NA, | ...... | .....
....
我首先拆分错误代码列以获取 3 个错误代码中的每一个,这是一个逗号分隔的值字符串。然后我需要过滤掉给定列表中包含所有三个错误代码的行,例如('F010'、'FC542'、'FB943')。我在 Teradata DB 上运行它,这是查询的一部分,但似乎没有过滤掉列表中的所有组合:
SELECT ... ,
CASE
WHEN ( substr(a.error_code, 1, position(',' in a.error_code)-1) in ('F010', 'FC542', 'FB012' 'FB943', 'NA')
AND substr(a.error_code,
position(',' in a.error_code)+1,
position(',' in substr(a.error_code, position(',' in a.error_code)+1, Characters(a.error_code)-position(',' in a.error_code)))-1) in ('F010', 'FC542', 'FB012' 'FB943', 'NA')
AND substr(a.error_code,
position(',' in a.error_code) + position(',' in substr(a.error_code, position(',' in a.error_code)+1, Characters(a.error_code)-position(',' in a.error_code)))+1,
Characters(a.error_code)-(position(',' in a.error_code) + position(',' in substr(a.error_code, position(',' in a.error_code)+1, Characters(a.error_code)-position(',' in a.error_code))))-1) in ('F010', 'FC542', 'FB012' 'FB943', 'NA') )
THEN 'No'
ELSE 'Yes'
end Error_Module,
...
FROM Error_code_table a
WHERE Error_Module = 'Yes'
另一方面,Characters() 函数与 Length() 函数相同。
谢谢,迈克