在MySQL中,我試圖找到具有匹配模式的值的行。在我的數據中,我使用的模式是401.%,402.%,403.%,404.%和405.%。換句話說,我試圖找到401和405之間的任何浮點數。另外,這些數字存儲爲varchar。它是一個字符串。到目前爲止,我已經嘗試了以下代碼,但徒勞無功:MySQL:用數字模式找到匹配
select * from my_table where my_column like '401.%'
等等。
你能想出一種方法使這項工作?感謝您的幫助提前。
在MySQL中,我試圖找到具有匹配模式的值的行。在我的數據中,我使用的模式是401.%,402.%,403.%,404.%和405.%。換句話說,我試圖找到401和405之間的任何浮點數。另外,這些數字存儲爲varchar。它是一個字符串。到目前爲止,我已經嘗試了以下代碼,但徒勞無功:MySQL:用數字模式找到匹配
select * from my_table where my_column like '401.%'
等等。
你能想出一種方法使這項工作?感謝您的幫助提前。
MySQL將數字轉換爲字符串非常好。所以,你可以嘗試這樣的事情:
where my_column + 0 >= 401 and my_column < 406
當然,這並不處理在前三個字符後出現壞字符的情況。但它可能足以達到你的目的。
編輯:
如果你確實想使用索引爲此,然後執行:
where my_column >= '401' and my_column < '406' and
my_column + 0 >= 401 and my_column < 406
前兩個字符串比較應該採取指數的優勢。
儘管我討厭與你的名聲不同的人,但你有沒有想過這意味着什麼?將所有記錄投射到數字上 - 即使是那些不匹配和沒收所有索引使用的記錄? –
@EugenRieck。 。 。可能是一個很好的觀點,但我不確定MySQL會使用索引來處理由'或'連接的'like'比較字符串。 –
如果'LIKE'不以通配符開頭,則會使用索引(如果存在)。在這種情況下,OR將會一個接一個執行。 –
select * from my_table where my_column like '401.%' or my_column like '402.%' or my_column like '403.%' or my_column like '404.%' or my_column like '405.%'
應該會藉此最好迄今爲止...排序循環展開的SQL
你真的知道這個查詢是否會使用索引嗎? –
剛剛在我的本地主機(Ubuntu 12.04,MySQL 5.5.35-0ubuntu0.12.04.2)上試過一個快速和骯髒的問題,並且執行計劃顯示「可能的密鑰」而不是「密鑰」......但只有1000行,全部在緩存中。 –
@GordonLinoff是的,它會使用索引;剛測試過> = 300k記錄在5.5) –
那麼我們應該如何'LIKE'運營商對待'[1-5]'?它搜索這個確切的字符串,因爲你沒有一個 - 它沒有返回任何東西。 – zerkms
你在那裏只能使用'my_column REGEXP'^ 40 [1-5] \'' –
我不清楚發佈我的示例代碼(編輯過)的意圖。我正在尋找像正則表達式這樣的東西。我想避免重複五次這樣的聲明。 – midtownguru