gpt4 book ai didi

Mysql 字符串和数字不相等/不匹配

转载 作者:行者123 更新时间:2023-11-29 13:38:51 26 4
gpt4 key购买 nike

我一直在尝试在 mysql 中编写一个简单的关键字比较查询,但由于某种原因,全数字关键字不会与全数字搜索词匹配。

我有一个产品表、一个关键字表和一个连接表。为了让事情变得更简单,我使用了一个执行连接的 View ,为我提供了每个产品 ID 的关键字字符串的简单列表。特别是 1 个产品有 4 个关键字:“John”、“Deere”、“8000”、“Midroller”,这些关键字在 View 中以及加入时正确显示。

我遇到的问题是 (keyword = "8000") 对于“8000”关键字来说永远不是真的。

示例

SELECT a.id, kw.keyword AS keyword, (kw.keyword = 'John' OR 
kw.keyword = 'Deere' OR
kw.keyword = "8000" OR
kw.keyword = 'Midroller') AS matched
FROM `kc5n2_product` AS a
INNER JOIN `product_keywords` AS kw ON a.id = kw.product
WHERE a.id =119

返回

 id    keyword    matches119    8000       0119    John       1119    Deere      1119    Midroller  1

I've had a look at this:MySql: Compare 2 strings which are numbers?but it didn't really help.

I also found this MySQL Query doesn't seem to be outputting expectations but I'm trying trying to compare them as strings, not as numbers.

Even trying

SELECT a.id, kw.keyword AS keyword, (CAST(kw.keyword as Char(4)) = CAST("8000" as Char(4))) AS matched

尝试强制 mysql 将它们都解释为字符串根本没有帮助。

我发现如果我使用它会匹配搜索词

kw.keyword LIKE "%8000%"

但如果可以的话我宁愿避免 LIKE,因为在这个阶段我希望保持搜索相当的限制性。

我做错了什么明显的事情吗?

最佳答案

在这种情况下,通常意味着您的“行为不当”值中有前导/尾随空格。

您可以使用这样的查询找到所有这些“不良”记录

SELECT *
FROM keywords
WHERE CHAR_LENGTH(keyword) <> CHAR_LENGTH(TRIM(keyword))

这里是SQLFiddle 演示

显然,您可以通过像这样的简单更新来修复它们

UPDATE keywords
SET keyword = TRIM(keyword)
WHERE CHAR_LENGTH(keyword) <> CHAR_LENGTH(TRIM(keyword))

这里是SQLFiddle 演示

关于Mysql 字符串和数字不相等/不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18394231/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com