0

mysql を使用して 2 つのテーブルを結合しようとしていますが、これは難しくありません。私の問題は、結合している列が非標準型であることです。さまざまなスタイルの誕生日列に結合しています。

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)

これは、年が常にフィールドの最後の 4 桁であるという事実に依存しています。

于 2012-07-18T08:33:15.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

これを試して

set @year:=1984;
Select columns from table
where concat('/',col,'/') like concat('%/',@year,'/%')
于 2012-07-18T08:25:12.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 に答える