簡體   English   中英

如何在mysql查詢中使用Regexp?

[英]How to use Regexp in mysql queries?

我有一個像以下一樣的mysql表

jobno | duration
----------------
1     |  1 hr
2     |  3 hrs
3     |  1 hr 30 mins
4     |  2 hrs 15 mins
5     |  1 hr 15 min
6     |  45 mins
7     |  30 min

是否可以選擇持續時間少於2小時的工作? 在谷歌花了很多時間后我發現mysql中有regexp功能。 但這適用於這種情況嗎? 我是mysql的新手。 請幫助我們。

select * from TableName where duration NOT REGEXP '^([^1]|[1-9][0-9]+) hr.*'

試試這個。這樣可行。 看這里

少於3你可以使用

select * from TableName where duration  REGEXP '^([1-2] hr|[0-9]+ min).*'

http://www.sqlfiddle.com/#!2/ba4de/12/0

同樣適用於4 [1-3]等。

查看duration列格式。 為什么你不能使用like

select * from yourTableName where duration like '1 hr%' or duration NOT like '%hr%';

或者如果您正在尋找4 hours以下的靈活性,請嘗試以下方法:

select * from yourTableName
where duration REGEXP '^[1-3].*$' or duration not like "%hr%";

你可以嘗試這個(不使用REGEX):

select * from TableName
where (duration not like '%hr%')
      OR (duration like '1 hr%')

結果:

JOBNO   DURATION
1       1 hr
3       1 hr 30 mins
5       1 hr 15 min
6       45 mins
7       30 min

SQL Fiddle中的示例結果。

說明:

WHERE子句中的第一個條件將獲取持續時間不包含單詞'hr'(僅為分鍾數)的記錄。 第二個條件是從1 hr開始獲取持續時間,這將是1小時-2小時之間的持續時間。

編輯:

為了使其更靈活,您可以這樣做:

select * from TableName
where (duration not like '%hr%')
      OR (CAST(SUBSTRING(duration,1,2) AS UNSIGNED) < 4)

結果:

JOBNO   DURATION
1       1 hr
2       3 hrs
3       1 hr 30 mins
4       2 hrs 15 mins
5       1 hr 15 min
6       45 mins
7       30 min

SQL Fiddle中的示例結果。

不要試圖在SQL中解決問題,語言不夠豐富。 相反,使用Perl或PHP或某些具有良好REGEXP庫的語言。

  1. 添加新列。

  2. 獲取行,使用應用程序語言轉換它們,然后更新新列。

  3. 刪除現有列 - 或保留它以供人類閱讀。

應該是。 這將是痛苦的,並且在這里真正過度設計解決方案。

數據庫的一般目的是加快訪問速度,一般來說,正則表達式很昂貴。 這里的另一個問題是可能沒有關於如何存儲這些時間字符串的承諾。 在您給出的示例中,您需要解析數字值以確定接下來是否應該“hr”或“hrs”。

我建議改為以秒為單位存儲持續時間(作為MySQL INT )。 然后,您可以快速輕松地搜索和排序該INT

jobno | duration
-------------------
1     |  3600
2     |  10800
3     |  5400
4     |  8100
5     |  4500
6     |  2700
7     |  1800

“不到兩小時”的查詢將如下所示:

SELECT `jobno` FROM `jobs` WHERE `duration` < 7200;

暫無
暫無

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

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