我正在编写一个函数,它会为我提供特定月份和年份的所有匹配项。 我将月份数和年份值传递给该函数,它应该使用以下查询来获得结果:
SELECT tahminler.match_id, tahminler.tahmin_text,matches_of_comments.match_id
FROM tahminler
INNER JOIN matches_of_comments ON tahminler.match_id = matches_of_comments.match_id
WHERE (
matches_of_comments.match_date = 'I DO NOT KNOW WHAT TO WRITE HERE'
)
AND tahminler.user_id =12
问题是matches_of_comments.match_date
类型是varchar,我传递月份和年份的值作为数字来制作像11.2013
这样的表格我如何比较这个传递给varchar日期的表单? ?我可以将类型转换为日期??如果我能做到这一点如何比较部分日期(只是月份和年份)??
答案 0 :(得分:0)
首先尝试将此转换为日期然后比较月份和年份,请注意它是不正确的实际存储日期为varchar
SELECT tahminler.match_id, tahminler.tahmin_text,matches_of_comments.match_id
FROM tahminler
INNER JOIN matches_of_comments ON tahminler.match_id = matches_of_comments.match_id
WHERE (
MONTH(STR_TO_DATE(matches_of_comments.match_date , '%m/%d/%Y'))= '07'//month variable
AND YEAR(STR_TO_DATE(matches_of_comments.match_date , '%m/%d/%Y'))= '2013'//year variable
)
AND tahminler.user_id =12
答案 1 :(得分:0)
STR_TO_DATE('11.2013', '%m.%Y')
会将字符串转换为datetime数据类型。 要以任何格式进行比较,您需要重新格式化:
DATE_FORMAT(STR_TO_DATE('11.2013', '%m.%Y'), '%Y-%m-%d')