2014-11-26 16 views
5

Mam MySQL tabeli danych, który wygląda jak poniżejMySQL, Split danych kolumny i uzyskać wynik dane podzielony

+--------------------------+ 
| period     | 
+--------------------------+ 
| 2014-11-27 to 2014-11-28 | 
| 2014-11-09 to 2014-11-09 | 
| 2014-11-07 to 2014-11-07 | 
| 2014-11-06 to 2014-11-06 | 
| 2014-11-04 to 2014-11-04 | 
| 2014-11-02 to 2014-11-02 | 
| 2014-11-01 to 2014-11-02 | 
| 2014-10-24 to 2014-10-24 | 
| 2014-10-23 to 2014-10-24 | 
| 2014-10-23 to 2014-10-24 | 
| 2014-10-23 to 2014-10-23 | 
| 2014-10-23 to 2014-10-23 | 
| 2014-10-20 to 2014-10-20 | 
| 2014-10-18 to 2014-10-18 | 
| 2014-10-17 to 2014-10-17 | 
| 2014-10-13 to 2014-10-13 | 
| 2014-10-13 to 2014-10-13 | 
| 2014-10-09 to 2014-10-10 | 
| 2014-10-06 to 2014-10-07 | 
| 2014-10-01 to 2014-10-10 | 
| 2014-09-30 to 2014-09-30 | 
| 2014-09-24 to 2014-09-24 | 
| 2014-09-12 to 2014-09-12 | 
| 2014-09-12 to 2014-09-12 | 
| 2014-09-08 to 2014-09-09 | 
| 2014-09-08 to 2014-09-08 | 
| 2014-09-08 to 2014-09-08 | 
| 2014-09-01 to 2014-09-01 | 
| 2014-09-01 to 2014-09-01 | 
+--------------------------+ 

Tutaj chciałbym uzyskać szczegółowe informacje między dwiema datami, takich jak (2014-09-01 to 2014-09-30) lub (2014-09-01 to 2014-010-3 0) lub (2014-09-01 to 2014-11-30) i jest to kolumna varchar, czy są jakieś możliwości uzyskania wyników między dwiema datami?

Odpowiedz

1

myślę poniżej jest słuszna,

select period from mysql_common.leave_details 
where (period like '%-11-%' or period like '%-10-%' or period like '%-09-%') 
order by period desc; 
+0

Wydaje mi się, że to nie jest odpowiedź na pierwotne pytanie. –

0

Spróbuj tego:

SELECT * 
FROM table1 A 
WHERE DATE(LEFT(A.period, 10)) BETWEEN DATE('2014-09-01') AND DATE('2014-09-30') AND 
     DATE(RIGHT(A.period, 10)) BETWEEN DATE('2014-09-01') AND DATE('2014-09-30'); 
1

Pierwszą rzeczą, którą należy naprawdę znormalizować swoją tabelę i zapisać daty z MySQL rodzimy aktualnych danych typów i upewnij przechowuje się je w dwóch kolumnach: start_date i end_date. Ułatwi to twoje życie.

Teraz wracając do obecnej sytuacji, możesz to zrobić, najpierw wyodrębnij datę początkową i końcową z łańcucha varchar za pomocą funkcji substring_index i ostatecznie użyj ich w warunku, używając klauzuli having.

select 
str_to_date(substring_index(period,'to',1),'%Y-%m-%d') as start_date, 
str_to_date(substring_index(period,'to',-1),'%Y-%m-%d') as end_date, 
period 
from table_name 
having start_date >='2014-09-01' and end_date <='2014-09-30'; 
+0

dziękuję, że działa dobrze. –