我有一張訪問表
visits
dob[varchar(50)] visitdate[Date] name[varchar(16)]
09/16/2001 2022-11-01 A
09/26/1966 2022-11-01 B
09/21/1999 2022-11-02 C
09/24/2000 2022-11-02 D
我需要在訪問日期之前獲取 24 歲以下人員的記錄
目前,我正在使用過濾器來獲取記錄
下面是代碼
function get_age_group($dob, $visitDate)
{
$dob = explode("/", $dob);
$dob = new DateTime($dob[2] . '-' . $dob[0] . '-' . $dob[1]);
$visitDate = new DateTime($visitDate);
$diff = $visitDate->diff($dob);
return $diff->y;
}
// here is query
$visits = DB::table('visits')->get();
foreach ($visits as $row)
{
$age = get_age_group($row->dob, $row->visitdate);
if(($age < 24))
{
//push the data
}
}
我想獲取兩個日期之間年齡在 24 歲以下的所有記錄(dob,visitdate)
// 這里是查詢 $visits = DB::table('visits')->where(?)->get();
我想洗掉上面的 foreach 函式,并想在查詢中添加 where 子句以獲取 24 歲以下的記錄。
uj5u.com熱心網友回復:
CREATE TABLE visits (dob VARCHAR(50), visitdate DATE, name VARCHAR(16));
INSERT INTO visits VALUES
('09/16/2001', '2022-11-01', 'A'),
('09/26/1966', '2022-11-01', 'B'),
('09/21/1999', '2022-11-02', 'C'),
('09/24/2000', '2022-11-02', 'D');
SELECT *
FROM visits
WHERE STR_TO_DATE(dob, '%m\/%d\/%Y') INTERVAL 24 YEAR > visitdate;
| 出生日期 | 訪問日期 | 姓名 |
|---|---|---|
| 2001 年 9 月 16 日 | 2022-11-01 | 一個 |
| 1999 年 9 月 21 日 | 2022-11-02 | C |
| 2000 年 9 月 24 日 | 2022-11-02 | D |
小提琴
如果DOB包含不正確的日期值(包括帶有多余前導字符的值),則不會回傳相應的行。我建議您將此列的資料型別更改為 DATE。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/526379.html
標籤:mysqlsql
