2010-12-22 21 views
0

下面是日期是如何格式化:如何查詢列了一個困難的日期格式

XXXXXX001221 

這日期是12月21日

如果我想用CURDATE獲得昨天的項目()函數如何做到這一點?

+1

是否 「00」 代表2010?如果是這樣,怎麼樣? – Guffa 2010-12-22 00:49:29

+1

那會是哪一年? 2000? – zsalzbank 2010-12-22 00:51:21

回答

1

如果你只是在做月 - 日正(指數是根據CURDATE()的字符串格式是YYYY-MM-DD):

SELECT * FROM table_name 
WHERE date_field LIKE 
    CONCAT('%', SUBSTR(DATE_SUB(CURDATE(), INTERVAL 1 DAY) FROM 6 FOR 2), 
       SUBSTR(DATE_SUB(CURDATE(), INTERVAL 1 DAY) FROM 9 FOR 2)); 

或者用提取物的替代方法() :

SELECT * FROM table_name 
WHERE date_field LIKE 
    CONCAT('%', EXTRACT(MONTH FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)), 
       EXTRACT(DAY FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY))); 




對於今年還有:

SELECT * FROM table_name 
WHERE date_field LIKE 
    CONCAT('%', SUBSTR(DATE_SUB(CURDATE(), INTERVAL 1 DAY) FROM 3 FOR 2), 
       SUBSTR(DATE_SUB(CURDATE(), INTERVAL 1 DAY) FROM 6 FOR 2), 
       SUBSTR(DATE_SUB(CURDATE(), INTERVAL 1 DAY) FROM 9 FOR 2)); 


SELECT * FROM table_name 
WHERE date_field LIKE 
    CONCAT('%', EXTRACT(YEAR FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)), 
       EXTRACT(MONTH FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)), 
       EXTRACT(DAY FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY))); 




編輯:與其WHERE date_field LIKE ...可以使用WHERE RIGHT(date_field, 6) = ...在codethis'答覆中提到:

SELECT * FROM table_name 
WHERE RIGHT(date_field, 4) = 
    CONCAT(EXTRACT(MONTH FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)), 
     EXTRACT(DAY FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY))); 

SELECT * FROM table_name 
WHERE RIGHT(date_field, 6) = 
    CONCAT(EXTRACT(YEAR FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)), 
     EXTRACT(MONTH FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)), 
     EXTRACT(DAY FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY))); 

注意:您還可以使用一個變量來保存計算DATE_SUB(CURDATE(),間隔1天)每時每刻。

SET @yesterday = DATE_SUB(CURDATE(), INTERVAL 1 DAY); 
SELECT ... 
0

試着這麼做:

SELECT * FROM table WHERE RIGHT(date_col, 6) = (SELECT CONVERT(VARCHAR(6), GETDATE()-1, 12) AS [YYMMDD])