2015-07-20 81 views
0

我有一個表與下面的列和樣本數據對字符串的正則表達式在SQL語句中

 
File Name   | Status 
'xxx_2015-07-20.csv' | Completed 
'xxx_2015-07-19.csv' | Completed 
'xxx_2015-07-18.csv' | Failed 
. 
. 
'xxx_2015-06-01.csv' | Failed 

現在我有兩個場景在我的應用程序(PHP MySQL的):

1)我有獲取當前文件的狀態。我可以這樣做:

select status from myTable where file_name like '%date(Y-m-d)%'; 

2)我想獲取從今天起1個月後生成的所有文件的狀態。假設今天是2015-07-20,那麼應該顯示2015-06-20的文件。 由於沒有日期列,我不能應用比較運算符並獲得結果。我相信它需要一些玩正則表達式。

我對正則表達式不熟悉,所以對此的任何幫助將不勝感激。

回答

0

如果圖案是相同的,即xxx_2015-07-20.csv您可以使用substring_index函數來獲取日期值

mysql> select substring_index(substring_index('xxx_2015-07-20.csv','_',-1),'.',1) as d; 
+------------+ 
| d   | 
+------------+ 
| 2015-07-20 | 
+------------+ 

現在使用相同的,你可以有選擇語句

select status from myTable 
    where 
     substring_index( 
     substring_index(file_name,'_',-1), 
     '.',1 
     ) = curdate(); 
+0

感謝。但根據我的理解,substring_index將返回一個字符串;所以我不能在它上應用比較(>運算符)。 –

+0

我試圖使用str_to_date()將字符串轉換爲日期,並且它看起來像預期的那樣正常工作。感謝您提供了方法。 –