Mariadb

SELECT with where between 未按預期工作

  • February 3, 2021

我正在嘗試使用此查詢在名稱 C89 到 C110 之間進行過濾。

SELECT id FROM servers WHERE server_name BETWEEN 'C89' AND 'C110'

但這不起作用。如果我將 c89 更改為 c90,它至少會選擇兩台伺服器。就像它只使用計算中的前 2 個數字一樣。

誰能幫我 ?我正在使用 mariadb 10.5 我正在尋找一種不需要在查詢中添加大量單詞的解決方案。為了可讀性盡可能精簡

一個簡短的答案:

... WHERE MID(server, 2) BETWEEN 89 AND 110

或者,如果您需要限制為“C”組伺服器:

... WHERE MID(server, 2) BETWEEN 89 AND 110
     AND server LIKE "C%"

或者(為了避免“24H1”的麻煩),

... WHERE IF(server LIKE "C%", 
            MID(server, 2) BETWEEN 89 AND 110,
            FALSE)

哦,現在我看到另一個“壞”的伺服器名稱(INT1)。面對現實,您需要將一些負擔放在 DBA 身上。他必須意識到,實際的方法是說

... WHERE server BETWEEN 'C89'  AND 'C99'
      OR server BETWEEN 'C100' AND 'C110'

也就是說,根據需要將過濾分解為盡可能多的範圍,以便字元串比較可以工作,而不是認為是數字的。

引用自:https://dba.stackexchange.com/questions/284484