2017-02-17 7 views
0

値が数値だけであるかどうかをチェックするmysql関数はありますか?数値の場合MySQL他の列を選択

私はCONCAT 2列、 の場合、tbl3.column2が数字であれば、他のテーブル列と連結します。文字列であれば、同じテーブルの他の列で行います。

SELECT tbl1.column1 as Column1, tbl2.column2 as Column2, 
IF tbl3.column2 REGEXP '^[0-9]+$' THEN CONCAT(tbl3.column1, ' ', tbl4.column1) ELSE CONCAT(tbl3.column1, ' ', tbl3.column2) END IF as Combined 
FROM table1 tbl1 
LEFT JOIN table2 tbl2 ON tbl1.id = tbl2.id 
LEFT JOIN table3 tbl3 ON tbl3.id = tbl1.id 
LEFT JOIN table4 tbl4 ON tbl4.id = tbl1.id 
LEFT JOIN table5 tbl5 ON tbl5.id = tbl1.id 
WHERE 
tbl5.column3 = ? 
ORDER BY Column1 ASC 

現在のコードは、エラーを与える:

You have an error in your SQL syntax; check the manual that corresponds 
to your MySQL server version for the right syntax to use near 'tbl3.column2 REGEXP '^[0-9]+$' 
    THEN CONCAT(tbl3.column1, ' ', tbl4.column1' at line 
+0

この問題は – Strawberry

+0

はいただ、テーブル名貧しいデザインの症候が、その判定@Strawberryを作るのに十分なされているようです – e4c5

答えて

2

はこれをしてくださいしてみてください。

SELECT tbl1.column1 AS Column1, tbl2.column2 AS Column2, 
IF(tbl3.column2 REGEXP '^[0-9]+$' 
    , CONCAT(tbl3.column1, ' ', tbl4.column1) 
    , CONCAT(tbl3.column1, ' ', tbl3.column2) 
    ) AS Combined 
FROM table1 tbl1 
LEFT JOIN table2 tbl2 ON tbl1.id = tbl2.id 
LEFT JOIN table3 tbl3 ON tbl3.id = tbl1.id 
LEFT JOIN table4 tbl4 ON tbl4.id = tbl1.id 
LEFT JOIN table5 tbl5 ON tbl5.id = tbl1.id 
WHERE 
tbl5.column3 = ? 
ORDER BY Column1 ASC 
関連する問題