我有一个包含tinyint
列的表格。我的应用程序级别有一个变换器,它将显示整数的文本表示,但现在我希望能够针对该列搜索Text而不添加另一列来保存整数的文本表示。我尝试了CASE
,但在where
子句中不允许这样做。
是否可以使用某种魔法搜索tinyint
,好像它是varchar
一样?
答案 0 :(得分:1)
而不是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查询应用程序代码中相应的字符串值。
最后,RDBMS中的类似选项当然是创建另一个表,将int值映射到字符串并对其执行JOIN。