我的数据库上有一个字段ERR_CODES
,其中包含当前记录的一些错误代码。
例如,它可以包含:
Invalid_Template_Code_Filename_WCLS,Color_Template_Of_Different_Domain_WCLS,Section_Not_Found_WCLS
假设我想测试它是否包含Section_Not_Found_WCLS
,而不是在字段的开头和结尾添加逗号。
我应该测试:
WHERE "ERR_CODES" LIKE '%,Section_Not_Found_WCLS,%' --between other errs
OR "ERR_CODES" LIKE 'Section_Not_Found_WCLS,%' --at start of a err sequence
OR "ERR_CODES" LIKE '%,Section_Not_Found_WCLS' --at end of a err sequence
OR "ERR_CODES" = 'Section_Not_Found_WCLS' --unique err for this record
这不是很美。
有没有办法使用通配符压缩它?
修改
在RegEx中,这将是((?<=,)|^)Section_Not_Found_WCLS((?=,)|$)
理想情况下,我想要一个适用于Oracle,MSSQL,PGSQL的解决方案。
答案 0 :(得分:1)
WHERE "ERR_CODES" LIKE '%Section_Not_Found_WCLS%'
修改强>
WHERE ',' + "ERR_CODES" + ',' LIKE '%,Section_Not_Found_WCLS,%'
答案 1 :(得分:1)
另一个可能需要考虑的事情是,使数据库更具关系性,因为它是标准的。
不要将一堆字符串保留在一行中,而是创建一个额外的表,以使事情更有条理。我创建了一个图像来描绘我的意思。