我有一個表tinyint
列。我的應用程序級別中有一個轉換器,它將顯示整數的文本表示形式,但是現在我希望能夠在該列上搜索文本而不添加另一列來保存整數的文本表示形式。我試過CASE
,但在where
條款中不允許。如何在MySQL中對tinyint列進行文本搜索?
是否有可能像搜索tinyint
那樣彷彿是varchar
有一些魔力?
我有一個表tinyint
列。我的應用程序級別中有一個轉換器,它將顯示整數的文本表示形式,但是現在我希望能夠在該列上搜索文本而不添加另一列來保存整數的文本表示形式。我試過CASE
,但在where
條款中不允許。如何在MySQL中對tinyint列進行文本搜索?
是否有可能像搜索tinyint
那樣彷彿是varchar
有一些魔力?
取而代之的是WHERE
子句中CASE
,您可以構建匹配字符串的TINYINT
值哪個邏輯AND
條件下,利用輸入文字和字符串文字。您的應用程序代碼必須在每種情況下提供<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的表。
請提供您嘗試過的SQL。沒有更多的信息,沒有太多的人能夠幫助你。 –