2017-07-09 17 views
0

IFステートメントを処理できないようにCONCAT関数には制限がありますか?私はCONCATの一部ではないが、CONCAT関数の内部に置くとすぐに、このエラーが発生します。#1583 - ネイティブ関数 'CONCAT'への呼び出しのパラメータが正しくありません。1583エラーを返すIFステートメントでのSQL - CONCAT

SELECT CONCAT((IF(DAYOFYEAR(`deathdatetr`) and DAYOFYEAR(`birthdatetr`),TO_DAYS(`deathdatetr`) - TO_DAYS(`birthdatetr`),(YEAR(`deathdatetr`) - YEAR(`birthdatetr`)) * 365))/365.25 as totaldays, " years old") from tng_people order by totaldays limit 1; 

このクエリは、データベース内の最も古い人物(年齢)を返します。私が照会しているテーブルには、とりわけ出生および死亡のフォーマットが「1860-07-30」のものが含まれています。

誰かが私にこれを理解させる手助けができますか?

+1

あなたの質問を編集し、サンプルデータと希望する結果を提供してください。 –

+0

IFの代わりにインラインIFにIIFを使用 –

答えて

1

あなたのカッコが詰まっています。式の途中に列エイリアスがあります。 MySQLが混乱していることは驚くことではありません。

if()は任意の式が期待されています。私は多くの(それが標準です)CASEを好むが、あなたはIF()で起動するので:

SELECT CONCAT(IF(DAYOFYEAR(`deathdatetr`) = DAYOFYEAR(`birthdatetr`), 
       TO_DAYS(`deathdatetr`) - TO_DAYS(`birthdatetr`), 
       (YEAR(`deathdatetr`) - YEAR(`birthdatetr`)) * 365) 
       ) /365.25, ' years old') as total_years 
from tng_people 
order by totaldays 
limit 1; 

私はこのロジックがやっていることになっているものは考えています。それは役に立つとは思われませんが、それは別の問題です。

あなたは日付の間の日数をしたい場合:

select (to_days(deathdatetr) - to_days(birthdatetr)) as total_days 
+0

@Gordonに感謝します。あなたは絶対に正しいです、私は混乱しています。私は系譜ソフトウェアでこのクエリを見つけ、それをWordpressで動作させるように操作しようとしていましたが、動作させるのが難しいです。 – user1088537

+0

あなたのアドバイスを受けて、次の2つの日付間の日数を計算しました: 'code'SELECT(to_days(deathdatetr) - to_days(birthdatetr))as total_days、' lastname' tng_peopleから ORDER BY total_days DESC制限1; 'code' しかし、CONCATを使用して姓と一緒に日数を入れようとすると、エラーが発生します。#1583 - ネイティブ関数 'concat'への呼び出しのパラメータが正しくありません。 – user1088537

+0

@ user1088537 。 。私は 'CONCAT()'に 'as total_days'をまだ持っていると思います。 –

0

私は、@Gordonからの助けのおかげでそれを考え出しました。明らかに、CONCAT()( "... as total_days")から削除してしまえば、クエリはうまくいきました。

SELECT CONCAT ("A", FLOOR((to_days(`deathdatetr`) - to_days(`birthdatetr`))/365.25)) from tng_people order by (to_days(`deathdatetr`) - to_days(`birthdatetr`)) DESC limit 1 

ありがとうございました!

関連する問題