我在MySQL DB的一列中有记录,例如:
ID Tax
1 GST + PST + ABC
2 PST + GST + ABC
3 XYZ
4 PST + ABC + GST
这些作为varchar存储在DB中。通过我的代码,我需要从数据库中获取与tax =“ GST + PST + ABC”之类的条件匹配的记录
由于查询,我目前只获得第一条记录:
Select * from table where taxes = "GST + PST + ABC";
但是我想从数据库中获取所有记录,无论它们的位置如何,以上三个名称(GST,PST,ABC)都会出现。
因此,如果我符合上述条件,我需要记录:
GST + PST + ABC
PST + GST + ABC
PST + ABC + GST
我正在使用MySQL DB,请让我知道有什么功能可以根据我的情况实现上述结果
答案 0 :(得分:2)
我建议这样的事情:
where taxes like '%GST%' and
taxes like '%PST%' and
taxes like '%ABC%' and
length(taxes) = 15;
如果您恰好需要这三个代码,这将测试长度。您还可以测试+
的数量:
where taxes like '%+%+%' and taxes not like '%+%+%+%'
或者,如果您只需要这些代码,则不要使用这些条件。
这假定名称是不重叠的(因此没有称为“ GS”或“ ST”的税)。如果可能的话:
where concat(' ', taxes, ' ') like '% GST %' and
concat(' ', taxes, ' ') like '% PST %' and
concat(' ', taxes, ' ') like '% ABC %';
答案 1 :(得分:1)
您可以使用OR
SELECT * FROM TABLE WHERE TAXES = "GST + PST + ABC"
OR TAXES = "GST + ABC + PST"
OR TAXES = "PST + GST + ABC"
OR TAXES = "PST + ABC + GST"
OR TAXES = "ABC + GST + PST"
OR TAXES = "ABC + PST + ABC"
这只是可能的一小部分,所以我看不出动态制作复杂SQL会变得棘手的原因。
如果数据可以采用其他格式,并且您想要匹配,例如:"GST + ABC + PST + ZZZ"
,那么我们可以使用LIKE
和%
答案 2 :(得分:1)
我会用
WHERE NAME REGEXP "GST"
AND NAME REGEXP "PST"
AND NAME REGEXP "ABC"
话虽如此,这听起来像是您的数据模型标准化不够的情况。也就是说,您应该将每种税收类型存储在单独的行中,这将使MySQL操作变得更加容易(就像在这种情况下一样)。以您所拥有的格式存储数据不是一个好习惯。我会尝试以这种方式存储它:
ID ID-sub TAX
-- ------ ---
1 1 GST
1 2 PST
1 3 ABC
2 1 PST
2 2 GST
可能根本不需要ID-sub。