<分区>
我有一个包含 tinyint
列的表。我的应用程序级别有一个转换器,它将显示整数的文本表示形式,但现在我希望能够针对该列搜索文本,而无需添加另一列来保存整数的文本表示形式。我尝试了 CASE
但它在 where
子句中是不允许的。
是否可以用一些魔法来搜索 tinyint
就好像它是 varchar
一样?
<分区>
我有一个包含 tinyint
列的表。我的应用程序级别有一个转换器,它将显示整数的文本表示形式,但现在我希望能够针对该列搜索文本,而无需添加另一列来保存整数的文本表示形式。我尝试了 CASE
但它在 where
子句中是不允许的。
是否可以用一些魔法来搜索 tinyint
就好像它是 varchar
一样?
最佳答案
而不是 CASE
在WHERE
子句,你可以构造逻辑 AND
将字符串与其 TINYINT
匹配的条件值,使用输入文本和字符串文字。您的应用程序代码必须提供 <input_text>
的值在任何情况下。
WHERE
(<input_text> = 'ZERO' AND column_value = 0)
OR (<input_text> = 'ONE' AND column_value = 1)
OR (<input_text> = 'TWO' AND column_value = 2)
如果输入文本与字符串文字相匹配,则将评估与整数匹配的其余条件。显然是 <input_text>
只能精确匹配零个或一个文字文本字符串。
这显然很快就会变得笨拙,因为 TINYINT
支持 255 个值的范围。您可能只考虑更改 TINYINT
列到 ENUM
type相反。
ALTER TABLE your_table MODIFY column_name ENUM('ONE','TWO','THREE',....)
也许比这两个更好的选择(如果不能使用 ENUM
)是在您的应用程序代码中创建一个数据结构映射字符串,并在执行对应字符串的查找后将整数值传递到 SQL 查询中应用程序代码中的值(value)。
最后,RDBMS 中的一个类似选项当然是创建另一个表,将 int 值映射到字符串并对其执行 JOIN。
关于mysql - 如何在 MySQL 中对 tinyint 列进行文本搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22393394/