[英]how to get all records greater than current date in Laravel when datatype is varchar
我是Laravel的新人。 我在MYSQL中編寫了查詢。 我想在Laravel中查詢,任何人都可以幫忙嗎?
SELECT * FROM `fixtures`
WHERE STR_TO_DATE(date,'%d-%m- %Y')>=STR_TO_DATE('03-11-2016','%d-%m-%Y')
列名是數據類型為varchar的日期。 我知道日期字段的錯誤DataType。
哪里
STR_TO_DATE(colname,'%m/%d/%Y) > date(now())
像這樣檢查:
SELECT * FROM `fixtures`
WHERE DATE_FORMAT(date, '%Y-%m-%d') >= '2016-11-03'
或以雄辯的方式:
\DB::table('fixtures')
->where(\DB::raw("DATE_FORMAT(date, '%Y-%m-%d')"), '>=', '2016-11-03')
->get();
以年 - 月 - 日的方式。 這比較好。 這應該有效。
如果您要求或有特定日期,
whereDate('date_column_name', '>=', $date_variable_name);
要么
whereDate('date_column_name', '>=', '2016-11-02');
試試這個。
使用Laravel Eloquent
與Carbon
:
q->whereDate('date ','>',Carbon::createFromFormat('d-m-Y','03-11-2016'));
使用whereRaw表達式。
雄辯的語法:
Fixture::whereRaw('STR_TO_DATE(date,"%d-%m-%Y") >= STR_TO_DATE("3-11-2016","%d-%m-%Y")')
查詢Bulider語法:
DB::table('fixtures')
->whereRaw('STR_TO_DATE(date,"%d-%m-%Y") >= STR_TO_DATE("03-11-2016","%d-%m-%Y")');
注意:我假設日期將被用戶接受,因此在這種情況下,請確保它已轉義且格式正確。 如果您不驗證用戶輸入,那么使用原始表達式可以為SQL注入開辟可能性
閱讀文檔: https : //laravel.com/docs/5.3/queries#raw-expressions
你可以像使用它一樣
$now_str = \Carbon\Carbon::now()->format('d-m-Y');
$q->whereDate('date', '>', $now_str);
你可以試試這個,因為Carbon的now()
和format()
方法會使它工作......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.