0

source_recidというテキストフィールドがあります。文字列のように半分の文字列の半分の数を格納します。

shop.orders.32442

構文はDATABASENAME.TABLENAME.RECID

私の目標は、この列をスキャンして、その中の最大のRECID(整数)を見つけることです。

だから、このような場合

shop.orders.32442
shop.orders.82000
shop.orders.34452

source_recidが。であるレコードになりますshop.orders.82000。なんで?原因82000がたまたま最大の整数です。

どのSQLステートメントがそのレコードを取得しますか?

これに対する1つのオプションは、新しい列(the_ids)を作成し、その中のすべての整数を移動してから、次のようなものを実行することです。

select source_recid from mytable 
  where source_recid like 'shop.orders.%' 
    order by the_ids DESC 
     LIMIT 1

このステップを踏まずにこれをやってのける方法はありますか?

4

2 に答える 2

1

まず、すべてのRECIDが永遠に正確に5文字の長さでない限り、「shop.order.9」は「shop.order.10」よりも大きくなるため、選択したものは機能しません。これは間違っています。

ここで行う必要があると思うのは、数値部分を抽出し、それを整数にキャストして、それでソートすることです。今、私はmySQLにアクセスできないので、これは正確には正しくないかもしれませんが、近いはずです...

SELECT
    CAST(SUBSTRING_INDEX(RECID,'.',-1) AS INT) AS RecIdNumber
FROM
    table
WHERE
    RECID LIKE 'shop.order.%'
ORDER BY
    RecIdNumber DESC
LIMIT
    0, 1

これは最後のドットの後の部分を取り、それをINTに変換し、「RecIdNumber」という名前を付けて、それでソートします。

これがお役に立てば幸いです。

于 2012-07-31T22:14:53.860 に答える
1
SELECT CAST(SUBSTRING_INDEX(field,'.',-1) AS INT) AS RID
FROM yourtable
WHERE
RECID LIKE 'shop.order.%'
ORDER BY
RID DESC
于 2012-07-31T22:26:19.567 に答える