您好我正在尝试解决如何从字符串中找到确切值的问题。
问题是在列StringB
中搜索值1
,它会找到包含1
的所有行。我的想法是,如果我在1
中查找值StringB
,它应该只找到值的确切位置。
使用LIKE
不是一个完美的选择,因为它会占用包含1
的所有行,使用=
也不是一个选项,因为它搜索的是相等的值。
还尝试使用INSTR
,但它的工作方式与LIKE
几乎相同。
与Locate
相同。
目前存储格式:
他们不会改变。
此collumn仅存储数字,无字母或其他类型的字符串ONLY数字(整数类型)
有没有办法严格搜索价值?
我的数据库是InnoDB。谢谢你的时间。
答案 0 :(得分:2)
尝试使用REGEXP
:
SELECT *
FROM yourTable
WHERE CONCAT('.', StringB, '.') REGEXP CONCAT('[.]', '2', '[.]');
我们也可以使用LIKE
代替REGEXP
:
SELECT *
FROM yourTable
WHERE CONCAT('.', StringB, '.') LIKE CONCAT('%.', '2', '.%');
答案 1 :(得分:1)
如果你这样做:
where stringB = 1
然后MySQL必须弄清楚要使用的类型。根据SQL规则,它会将'1.00'
转换为数字 - 并且它们匹配。
如果你这样做
where stringB = '1'
然后类型做你想要的。并将值作为字符串进行比较。
更多:保持类型一致。不要依赖隐式转换。