0

我正在尝试使用 mysql 加入两个表,这并不难,我的问题是我加入的列有一个非标准类型,我加入的生日列可以有多种不同的样式:

10/29
01/10/1984
12/32/2007
10/1997
null
1984

如果用户来自同一年,我只想加入列,所以在上面的例子中

01/10/1984
1984

将被允许​​加入,而其他人将被忽略。

mysql 是否提供了一种将生日拆分为年份组件的方法?

4

4 回答 4

1

您可以使用 RIGHT() 函数加入,仅加入日期的最后 4 位,还可以使用 INSTR() 检查最后 4 位是否不包含“/”(即确保它是年)。

像这样的东西:

SELECT 
    *
FROM 
    tbl1 t
JOIN tbl2 ON (RIGHT(tbl1.colname, 4) = RIGHT(tbl2.colname, 4) AND INSTR(RIGHT(tbl1.colname, 4), '/') = 0)

这依赖于年份始终是字段的最后四位这一事实。

于 2012-07-18T08:33:15.020 回答
0

试试这个

set @year:=1984;
Select columns from table
where concat('/',col,'/') like concat('%/',@year,'/%')
于 2012-07-18T08:25:12.020 回答
0

使用YEAR()功能。

请参考http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_year

于 2012-07-18T08:30:43.020 回答
0

以下查询将返回用户正确填写日期字段或仅输入年份的行。

select *
from table
where year(str_to_date(if(length(col_with_date) = 4, concat('01/01/', col_with_date), col_with_date , '%d/%m/%Y')) is not null 

请注意分隔符“/”。我想您将需要创建存储过程以将所有可能的分隔符替换为“/”。类似于以下调用:

replace_word(string_to_replace, what, with)和例子replace_words(col_with_date, '|/|,|.|-|', '/')

希望能帮助到你

于 2012-07-18T08:40:25.563 回答