簡體   English   中英

MySQL 從帶有過濾的文本列中選擇

[英]MySQL select from text column with filtering

我想查詢一個 MySQL 5 的數據庫。

假設數據庫名稱為db ,表名稱為table ,列名稱為column

該列是一個text

包含以下內容,例如:

aksksksksjsjk&ct=100&rxp=0918&rpa=100
aksksksksjsjk&ct=100&rxp=1018&ls=1

所以我想只在 rxp > 0918地方查詢那個表和 grep

所以我期待結果是:

aksksksksjsjk&ct=100&rxp=1018&ls=1

我嘗試使用SELECT column FROM db.table WHERE column LIKE '%rxp=1018%'並且它正在工作! 但這意味着我需要手動插入所有日期!

假設rxp=之后的值始終為MMYY格式的長度 4,那么以下內容應該可以為您解決問題。 請注意,由於您的日期是字符串格式,因此我們需要分別對月份和年份進行檢查。

SELECT *
FROM db.table
WHERE LEFT(SUBSTRING_INDEX(testColumn, 'rxp=', -1), 2)  > '09' 
    AND MID(SUBSTRING_INDEX(testColumn, 'rxp=', -1), 3, 2)  >= '18'

假設您在column下有以下值:

aksksksksjsjk&ct=100&rxp=0918&rpa=100
aksksksksjsjk&ct=100&rxp=1018&ls=1
aksksksksjsjk&ct=100&rxp=1116&ls=1

查詢的輸出應該是

aksksksksjsjk&ct=100&rxp=1018&ls=1

但是,我強烈建議您規范化您的表並將每個值存儲在單獨的列( ctrxprpals等)中,而不是將大量信息組合到一個字符串中。

create table #temp(
Integ Integer
 )
insert into #temp values(CONVERT(INT, right(left('aksksksksjsjk&ct=100&rxp=0918&rpa=100', 29),4)) ) ,
                        (CONVERT(INT, right(left('aksksksksjsjk&ct=100&rxp=1018&ls=1', 29),4)) ) 
select * from #temp
where Integ >918
drop table #temp

希望對你有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM