2016-04-28 11 views
-1

私は列「Rechnungnr」と「日」
例204分の2016、202分の2016、100分の2016、12分の2015、231分の2016 と表を持っていると私は最後の必要があります最高の数字。ここ - > 2016/231ORDERBY MYSQL構文間違ったデータ

SELECT * FROM TABLE Where YEAR(Date) = '2016' ORDER BY length(`Rechnungnr`) DESC LIMIT 1 

しかし

Greetz、マルト

+0

たものではありませんmysqlの日付を使用するため、実際のmysqlの日付/時刻の値に変換するまで、mysqlの日付関数を使用することはできません。それらは文字列です。 lengthは、ある値の文字列表現の長さを示します。 (999)は長さ(000)とまったく同じです - 長さを使って "最高の数"、 "最長の数"しか使用できません –

+0

ああ、私は "/"を置き換えて数字にキャストできますか?最高の数でソートしますか? –

+0

日付を正しく保存する – Strawberry

答えて

0

char_length()の組み合わせにrechnungnrの値を使用囲まれた列名の日付を使用してみてください:(機能していないthatsのこのように最大値を得る:

SELECT * FROM TABLE 
Where YEAR(Date) = 2016 ORDER BY char_length(`Rechnungnr`) DESC, `Rechnungnr` DESC LIMIT 1 

char_length()は、Rechnungnrフィールド内の文字数で結果を並べ、同じ長さの文字列内で、フィールド自体の値で並べ替えます。既存のデータセットで

0

がbacktics

SELECT * FROM TABLE Where YEAR(`Date`) = '2016' ORDER BY length(`Rechnungnr`) DESC LIMIT 1 
0

(私が正しく、スキーマを理解していれば)あなたは、今年の日を取得するには、このような何かをしようとint型にキャストして、ソートのことができます。

SELECT *, CAST(RIGHT(LENGTH(`Rechnungnr`) - (INSTR(`Rechnungnr`, '/') + 1)) AS UNSIGNED) AS `DayOfYear` FROM TABLE Where YEAR(Date) = '2016' ORDER BY `DayOfYear` DESC LIMIT 1