簡體   English   中英

從mysql表中獲取數據,其中一列包含字符串格式的日期並與今天的日期匹配

[英]Fetch data from mysql table where a column contains date in string format and matches with today's date

我收到了一位客戶的任務,該客戶希望對其正在進行的應用程序進行一些更改。 有一個稱為用戶的表,該表具有一個稱為生日的字段。 以前的開發人員是一個白痴,他保存了生日varchar(255)而不是datetime 生日列中的數據保存為January 01, 1986

我想獲取生日在當前日期的所有用戶。

我嘗試使用:

$query = "SELECT  * FROM users WHERE 
DAY(STR_TO_DATE(birthday, '%Y-%m-%d')) = '".date('d')."' 
AND MONTH(STR_TO_DATE(birthday, '%Y-%m-%d')) = '".date('m')."'";

但是它返回的是空數據集。 我怎樣才能解決這個問題?

您的日期格式與您在問題中指定的日期格式不匹配。 我認為您正在尋找:

$query = "SELECT * FROM users WHERE 
DAY(STR_TO_DATE(birthday, '%M %d, %Y')) = '".date('d')."' 
AND MONTH(STR_TO_DATE(birthday, '%M %d, %Y')) = '".date('m')."'";

我解決了,意識到自己做錯了:

$query = "SELECT * FROM users 
           WHERE DAY(date_format(str_to_date( birthday, '%M %d, %Y' ), '%Y-%m-%d' )) = '".date('d')."'
          AND MONTH(date_format(str_to_date( birthday, '%M %d, %Y' ), '%Y-%m-%d' )) = '".date('m')."'";

首先,我們需要將生日從字符串轉換為兼容日期,然后將其格式化為實際日期。

我將用數據庫使用的相同格式將今天的日期呈現為字符串,然后搜索該確切的字符串。 至少以這種方式,如果對字段建立索引,您將獲得索引的好處。 (或者應該添加一個。)按原樣查詢,您將始終必須進行順序掃描。

$today = date('F d, Y');
$sql = 'SELECT * FROM users WHERE birthday = :today';

另外,通過mysqliPDO使用帶有綁定參數的准備好的語句。 這篇文章有一些很好的例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM