【发布时间】:2020-01-16 06:48:49
【问题描述】:
我有15-Nov-20 格式的日期。我想在将数据插入表之前使用查询将其转换为 MySQL 表的日期格式(yyyy-mm-dd),并希望分别获取该日期的周和年。我尝试了以下查询:
SELECT STR_TO_DATE('15-Nov-20', '%Y-%m-%d') FROM table
但这会返回NULL。
【问题讨论】:
我有15-Nov-20 格式的日期。我想在将数据插入表之前使用查询将其转换为 MySQL 表的日期格式(yyyy-mm-dd),并希望分别获取该日期的周和年。我尝试了以下查询:
SELECT STR_TO_DATE('15-Nov-20', '%Y-%m-%d') FROM table
但这会返回NULL。
【问题讨论】:
您的格式字符串不正确(请参阅manual)。对于您的示例数据,它应该是 %d-%M-%y 例如
SELECT STR_TO_DATE('15-Nov-20', '%d-%M-%y')
输出:
2020-11-15
然后要获得年份和星期,您可以使用DATE_FORMAT 和%U、%u、%V 或%v 之一,具体取决于您的需要(有关它们的定义,请参见manual),例如
SELECT DATE_FORMAT(STR_TO_DATE('15-Nov-20', '%d-%M-%y'), '%Y-%U')
输出
2020-46
请注意,如果您使用%V 或%v 作为周数,则还必须使用%X 或%x 作为年份,例如
SELECT DATE_FORMAT(STR_TO_DATE('15-Nov-20', '%d-%M-%y'), '%X-%V')
输出
2020-46
【讨论】:
您还可以使用 PHP 的 DateTime 类来获取周数和年数。
$parsedDate = new DateTime('15-Nov-20');
$week = $parsedDate->format("W");
echo 'Weeknumber:' . $week;
echo '<br>';
$year = $parsedDate->format("Y");
echo 'Year:' . $year;
这会给你:
Weeknumber:46
Year:2020
【讨论】: