2009-09-05 79 views
8

Tôi gặp sự cố liên quan đến chức năng datediff MYSQL, tôi có thể sử dụng nó và nó rất đơn giản. Nhưng tôi không hiểu cách sử dụng nó để thu thập sự khác biệt trong lĩnh vực bảng. Ví dụ.Sự khác biệt về ngày trong MySQL để tính tuổi

Tôi có một cột dob và tôi muốn viết một truy vấn mà sẽ làm điều gì đó như

select dateDiff(current_timeStamp,dob) 
from sometable 'here dob is the table column 

tôi có nghĩa là tôi muốn sự khác biệt kể từ thời điểm ngày hiện tại đến lĩnh vực bảng dob, mỗi kết quả truy vấn là sự khác biệt, tuổi của người dùng.

+0

Sẽ không phải "sự khác biệt từ datetime hiện tại và một DOB" luôn luôn được tuổi của người đó? –

Trả lời

19

Ý bạn là như thế này?

SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), dob)), "%Y")+0 AS age from sometable 

(Source)

+0

Trả về Null ngày của tôi được lưu trữ là m/d/năm, cho bản ghi mà tôi đang làm việc có 1/1/1969 dob. nhưng nó trả về null: (tất cả thời gian – chsab420

+0

Sử dụng TIMESTAMPDIFF là một lựa chọn tốt hơn nhiều – Eric

1

Nếu bạn muốn, cho mỗi người dùng, hiển thị độ tuổi trong năm, làm

select name,extract(year from (from_days(dateDiff(current_timestamp,dob)))) 
     from sometable; 
+0

Trả về Null ngày của tôi được lưu trữ là m/d/năm, cho bản ghi mà tôi đang làm việc có 1/1/1969 dob. (tất cả thời gian – chsab420

+0

Vậy kiểu dữ liệu trên trường dob của bạn là gì? Bạn thực sự nên sử dụng loại ngày/giờ, không phải là văn bản thuần túy. –

1

Nếu tôi hiểu ý kiến ​​của bạn về câu trả lời trước, ngày-của - cột sinh không thực sự là giá trị DATE nhưng một chuỗi có định dạng m/d/y. Tôi mạnh mẽ khuyên bạn nên thay đổi điều này; nó làm chậm bất kỳ tính toán ngày nào bạn muốn thực hiện và bạn có nguy cơ bị các giá trị ngày không hợp lệ được nhập vào cột.

Tôi nghĩ rằng đây là những gì bạn cần. Nó sử dụng STR_TO_DATE() chức năng và một thuật toán để tính tuổi từ tài liệu MySQL:

SELECT YEAR(CURDATE()) - YEAR(STR_TO_DATE(dob, '%m/%d/%Y')) 
- (RIGHT(CURDATE(), 5) < RIGHT(STR_TO_DATE(dob, '%m/%d/%Y'), 5)) AS age 
FROM sometable; 
0

Tôi nghĩ rằng đây sẽ giúp

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(@dateofbirth)), '%Y') + 0;

Lưu ý: Cho D.O.B trong định dạng đúng, E.G. YYYY-MM-DD'=> '1991-11-11

8

Bạn có thể làm

SELECT TIMESTAMPDIFF(YEAR, date_of_birth, NOW()) AS tuổi này FROM your_table

trình mọi lúc.

0

Hãy thử điều này

SELECT DATEDIFF(CURDATE(), '2014-02-14'); 
0
select truncate(datediff(curdate(),dob)/365.25,0) from table; 
Các vấn đề liên quan