2011-01-21 36 views
7

Tôi đang tìm cách chọn hàng mà thời gian hiện tại nằm giữa hai giá trị đã đặt trong hàng. Tôi đã thiết lập một bảng với 3 cột, 2 trong số họ giữ một dấu thời gian (HH: MM: SS), một trong những khác một chuỗi. Có cách nào tôi có thể nhận được chuỗi tương ứng với thời gian hiện tại? Để đặt nó theo cách trừu tượng hơn:MySQL Chọn: WHERE (giờ bây giờ) = GIỮA giá trị bảng và giá trị bảng

Chuỗi CHỌN TỪ Tên bảng WHERE (Giờ hiện tại) GIỮA (Giá trị giới hạn dưới) và (Giá trị giới hạn trên);

alt text

Vì vậy, về cơ bản, dựa trên thời gian hiện tại, kịch bản của tôi nên đầu ra chuỗi chính xác.

Tôi làm cách nào để thực hiện việc này? Cảm ơn!

+0

Loại nào là 'lower_limit' và' upper_limit'? – Quassnoi

+1

Đêm của bạn có kéo dài hơn hai ngày không? 'GIỮA '22: 00: 00 'VÀ '05: 00: 00'' có lẽ sẽ không trả lại những gì bạn đang chờ đợi. – eumiro

+0

@eumiro: điểm tốt! – Mchl

Trả lời

5

Trong MySQL, timestamp là một từ khá khó hiểu.

Nếu họ lowerlimitupperlimitTIME cột 00:00:00-23:59:59:

SELECT String 
FROM TableName 
WHERE CURTIME() BETWEEN lowerlimit AND upperlimit 
     OR CURTIME() BETWEEN SUBTIME(upperlimit, '24:00:00') AND lowerlimit 
     OR SUBTIME(CURTIME(), '24:00:00') BETWEEN SUBTIME(upperlimit, '24:00:00') AND lowerlimit 

này sẽ xử lý hiệu ứng chuyển tiếp nửa đêm một cách chính xác.

+1

Đã xảy ra lỗi tương tự. NOW() chứa phần ngày tháng. CURTIME() nên được sử dụng. Downvote không phải từ tôi. – Mchl

+0

@Mchl: tại sao tôi? – Quassnoi

+0

?? Bạn không chắc mình đang hỏi về điều gì. Dù sao bây giờ câu trả lời của bạn phù hợp với câu hỏi tốt hơn nhiều so với những người khác. – Mchl

2

Cách bạn đã làm được khá nhiều nó:

SELECT String FROM TableName WHERE CURTIME() BETWEEN (Lower Limit Time Value) AND (Upper Limit Time Value); 
+0

Dấu ngoặc cũng đúng trong MySQL? Tôi không quen thuộc với cú pháp và tôi hiện đang sử dụng 'Something' (bình thường 'trích dẫn' dường như không hoạt động) trong các truy vấn của tôi thông qua PHP. – Chris

+0

Không. Backticks (') là cách chính xác để phân định các tên cột không chuẩn. ví dụ: – Mchl

4
SELECT string_col 
FROM your_table 
WHERE CURTIME() BETWEEN lower_limit_col AND upper_limit_col 
+0

Cảm ơn bạn đã cho thấy tôi nên sử dụng các cột tên :-) – Chris

2

loại của hai cột phải là thời gian (và không dấu thời gian). Sau đó, câu trả lời nằm trong câu hỏi của bạn:

select string from tablename where curtime() between lowerlimit and upperlimit 

tuy nhiên, hãy đảm bảo rằng đêm không đi từ 22:00 đến 06:00:00 mặc dù nó sẽ không hoạt động. Nhưng bạn có thể giới thiệu hai khoảng thời gian cho khả năng: một khoảng thời gian từ 22:00:00 đến 24:00:00 và một khoảng thời gian khác từ 00:00:00 đến 06:00:00.

+0

Ah, tôi không có những chuyển đổi may mắn thay, cảm ơn cho người đứng đầu lên mặc dù! – Chris

Các vấn đề liên quan