2

私はDaily_accountテーブルを持っています:

customer_id    account_id            current_balance

1                 D1                       200
2                 d2                       300
3                 d10                      400
4                 d100                     500
5                 d101                     600

今、私は質問があります:

select customer_id,account_id,current_balance
from daily_account
where account_id between 'D1' and'D100'

D1、D10、D100のアカウント番号の出力を取得していますが、すべての番号の出力を取得したいと思います。D1とd100の間にあるすべてのアカウントの出力を取得するにはどうすればよいですか?

4

6 に答える 6

1

さらに調査した結果、キャスト関数である関数が1つ見つかり、答えが得られました。

select  customer_id, account_id,current_balance  from daily_account 
where cast(right(Account_id,(length(account_id)-1)) AS unsigned) 
between '1' and'100'
于 2012-11-05T05:36:11.020 に答える
1

上記のスニペットのbetweenステートメントは、番号の順序とは異なる文字列を処理しています。

account_idが常に「D」で始まる場合は、それを削除して番号にキャストできます。

SELECT *
, REPLACE(account_id, 'd','0') // just replace
, CAST( REPLACE(account_id, 'd','0') as int) // now convert to int
FROM daily_account

間に使用するには、次のように使用します

SELECT customer_id,account_id,current_balance
FROM daily_account
WHERE 
CAST( REPLACE(account_id, 'd','0') as int) between 1 and 100
于 2012-11-05T05:37:40.657 に答える
1

すべてが1つの文字で始まる場合は、次のことができます。

SELECT * FROM (
SELECT customer_id
     , CAST(REPLACE(account_id,'d','') AS int) account_id
     , current_balance
FROM daily_account) tbl
WHERE account_id between '1' and'100'
于 2012-11-05T05:38:05.520 に答える
1

1つのトリックは、次のようにaccount_idの非数値を削除することです。

SELECT * FROM Daily_account WHERE CAST(REPLACE(account_id,'D','') AS INT) BETWEEN 1 AND 10
于 2012-11-05T05:38:12.127 に答える
1
select customer_id,account_id,current_balance
from daily_account
where CAST(replace(account_id, 'D', '') as int) between 1 and 100
于 2012-11-05T05:39:06.220 に答える
0

あなたの答えは、ソリューションがだけでなく、さまざまなプレフィックスで機能することを望んでいることを意味しているようです'D'。その場合は、次の代替案を検討してください。

SELECT customer_id, account_id, current_balance
FROM daily_account
WHERE STUFF(account_id, 1, 1, '') between 1 and 100
;

上記はSQLServerですが、あなたの答えもMySQLを使用していることを示唆しているように思われるため、MySQLに相当するものを次に示します。

SELECT customer_id, account_id, current_balance
FROM daily_account
WHERE INSERT(account_id, 1, 1, '') between 1 and 100
;
于 2012-11-05T06:40:51.887 に答える