21

請求書番号の列を含むテーブルがあるとします。データ型は、次のような文字列/整数値が混在する VARCHAR です。

invoice_number
**************
    HKL1
    HKL2
    HKL3
    .....
    HKL12
    HKL13
    HKL14
    HKL15

最大値を選択しようとしましたが、最高値の「HKL15」ではなく、「HKL9」で返されます。

SELECT MAX( invoice_number )
FROM `invoice_header`
4

6 に答える 6

27

HKL9HKL15(文字列) は文字列として比較されるため、より大きいです。問題に対処する 1 つの方法は、請求書番号の数値部分のみを返す列関数を定義することです。

すべての請求書番号が で始まる場合はHKL、次を使用できます。

SELECT MAX(CAST(SUBSTRING(invoice_number, 4, length(invoice_number)-3) AS UNSIGNED)) FROM table

これは、invoice_number から最初の 3 文字を除いたものを int に変換し、そこから max を選択します。

于 2013-05-11T12:14:50.417 に答える
7
select ifnull(max(CONVERT(invoice_number, SIGNED INTEGER)), 0)
from invoice_header 
where invoice_number REGEXP '^[0-9]+$'
于 2016-05-26T10:35:59.980 に答える
2

これも機能するはずです

SELECT invoice_number
FROM invoice_header
ORDER BY LENGTH( invoice_number) DESC,invoice_number DESC 
LIMIT 0,1
于 2016-12-07T07:48:31.087 に答える