mysql - 如何在 MySQL 中对 tinyint 列进行文本搜索?

标签 mysql sql

<分区>

我有一个包含 tinyint 列的表。我的应用程序级别有一个转换器,它将显示整数的文本表示形式,但现在我希望能够针对该列搜索文本,而无需添加另一列来保存整数的文本表示形式。我尝试了 CASE 但它在 where 子句中是不允许的。

是否可以用一些魔法来搜索 tinyint 就好像它是 varchar 一样?

最佳答案

而不是 CASEWHERE子句,你可以构造逻辑 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/

相关文章:

php - 如何向sql server添加数据

mysql - 对 MySQL 中跨日期和位置的实体共现进行计数和排序

php - MySQL - 按时间间隔选择时间范围内的值

php - Yii2中数据库的具体数据量

Mysql数据库恢复

SQL 服务器 : Crosstab/Pivot Price List

mysql - 如何使用cygnus在MySql中存储数据?

MySQL 树层次结构查询?

mysql - C程序向MYSQL数据库添加数据-没有添加结果

mysql - 使用 sql 将一些列值放入新列中