III. Các Thao tác tên bảng 1 Lựa chọn các hàng
4. Xác định ngày tháng ,năm cho các kết quả tính tốn:
• MySQL cung cấp một rất nhiều chức năng mà bạn có thể sử dụng để thực hiện các kết quả tính tốn theo ngày.Vi dụ để tính tốn tuổi hoặc trích dẫn một phần của ngày. Để xác định mỗi con vẹt của bạn là bao nhiêu tuổi ,tính tốn tuổi nh− là khoảng cách giữa ngày sinh và ngày hiện tại. Điều đó đ−ợc thực hiện nh− sau:
mysql> SELECT name, (TO_DAYS(NOW())- TO_DAYS(birth))/365 FROM pet;
• Mặc dù các câu lệnh đang làm việc nh−ng có một vài điều về nó vẫn có thể cải tiến .
• Đầu tiên kết quả có thể đ−ợc xem dễ dàng hơn nếu các hàng đ−ợc trình bày theo một thứ tự nào đó
• Thứ hai, tiêu đề cho cột tuổi thì khơng có ý nghĩa lắm. Vấn đề thứ nhất có thể đ−ợc giải quyết bằng cách thêm vào từ khoá “ODER BY” để sắp xếp kết quả theo tên .Để liên hệ với tiêu đề của cột, cung cấp một tên cho cột với một nhãn xuất hiện trong kết quả(đ−ợc gọi là bí danh)
mysql> SELECT name, (TO_DAYS(NOW())- TO_DAYS(birth))/365 AS age
-> FROM pet ORDER BY name;
• Nếu muốn sắp xếp kết quả theo tuổi hơn là theo tên, ta chi việc sử dụng một câu lệnh “ODER BY” khác
mysql> SELECT name, (TO_DAYS(NOW())- TO_DAYS(birth))/365 AS age
->FROM pet ORDER BY age;
• Một câu lệnh có thể đ−ợc sử dụng để xác định tuổi thọ cho những con vật đã chết. Bạn xác định các con vật nào đ−ợc kiểm tra có hay khơng giá trị chết là NULL. Sau đó đối với các con có giá trị non_NULL, tính tốn sự khác nhau giữa giá trị chết và sinh.
mysql> SELECT name, birth, death, (TO_DAYS(death)- TO_DAYS(birth))/365 AS age
FROM pet WHERE death IS NOT NULL ORDER BY age; name birth Death age
Bowse 1989-08-31 1995-07-29 | 5.91
• Câu lệnh sử dụng “death is NOT NULL” vẫn tốt hơn là
“death=!=NULL” bởi vì NULL là giá trị đặc biệt. Điều này đ−ợc giải thích ở phần sau ,
• Nếu bạn muốn biết con vật nào có ngày sinh vào tháng sau ?với kiểu tính tốn này ,năm và ngày đều khơng có liên quan ,bạn chẳng qua chỉ muốn trích phần tháng trong cột ngày sinh.Msql cung cấp rất nhiều chức năng trích đẫn phần ngày sinhnh− AR(),MONTH(),DAY OF MONTH() ,MONTH() đều là chức năng phức hợp .ở đây để xem nó làm việc ra sao ,chạy một câu lệnh đơn giản để hiển thị giá trị của cả ngày sinh và tháng sinh
mysql> SELECT name, birth, MONTH(birth) FROM pet;
• Việc tìm các con vật có ngày sinh vào tháng sau hết sức dễ dàng .Giả sử tháng hiện tại có tháng t− .Sau đó ,giá trị tháng là 4 và bạn tìm các con vật đ−ợc sinh vào tháng năm nh− sau:
o mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5;
• Tất nhiên có một rắc rối nhỏ nếu tháng hiện tại là tháng 12.Bạn không chỉ thêm 1 vào số tháng (12) và tìm xem con vật nào sinh vào tháng 13 ,bởi vì khơng có tháng nh− vậy .Thay vào đó ,bạn tìm các con vật sinh vào tháng 1
• Bạn cũng có thể viết câu lệnh mà nó làm việc khơng quan tâm tới tháng hiện tại là bao nhiêu ,với cách đó bạn khơng phải sử dụng 1 số tháng riêng biệt nào trong câu lênh DATE=AĐ() cho phép bạn thêm một khoảng thời gian vào một ngày đã đ−ợc đ−a ra .Nếu bạn thêm 1 tháng vào giá trị của NULL() ,sau đo trích phần tháng với MONTH(),kết quả tạo ra tháng mà chúng ta tìm ngày sinh trong đó
mysql> SELECT name, birth FROM pet
->WHERE MONTH(birth) =
MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));
• Một cách khác để hồn thành cơng việc t−ơng tự là phải thêm 1 vào để có tháng sau tháng hiện tại (sau khi sử dụng chức năng module MOD) để “bọc xung quanh ” giá trị tháng tới 0 nếu nó hiện tại là tháng 12
mysql> SELECT name, birth FROM pet
WHERE MONTH(birth) = MOD(MONTH(NOW()), 12) 1;
• Chú ý rằng MONTH quay vịng là một số giữ tháng 1 và tháng 12 ,và MOD quay vòng là một số giữa 0 và 11.Do Đó sự thêm phải theo sau MOD() nếu khơng chúng ta sẽ đi từ tháng 11 đến tháng 1