J'ai une table Daily_account
:
customer_id account_id current_balance 1 D1 200 2 d2 300 3 d10 400 4 d100 500 5 d101 600
Maintenant j'ai une requête:
select customer_id,account_id,current_balance from daily_account where account_id between 'D1' and'D100'
Il me donne la sortie du numéro de count de D1, D10, D100, mais je veux get la sortie de chaque non. Comment get la sortie de chaque count qui vient entre D1 et D100?
L'instruction between de l'extrait ci-dessus fonctionne avec une string, ce qui est différent de l'ordre des numéros.
Dans le cas où le account_id commence toujours par 'D', nous pouvons le supprimer et le convertir en un nombre:
SELECT * , REPLACE(account_id, 'd','0') // just replace , CAST( REPLACE(account_id, 'd','0') as int) // now convert to int FROM daily_account
et pour l'utiliser entre les deux, utilisez-le comme ça
SELECT customer_id,account_id,current_balance FROM daily_account WHERE CAST( REPLACE(account_id, 'd','0') as int) between 1 and 100
Une astuce consiste à supprimer le non-numérique dans le account_id comme ceci:
SELECT * FROM Daily_account WHERE CAST(REPLACE(account_id,'D','') AS INT) BETWEEN 1 AND 10
select customer_id,account_id,current_balance from daily_account where CAST(replace(account_id, 'D', '') as int) between 1 and 100
Si tout commence avec un char, vous pouvez faire:
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'
après un peu plus de search, j'ai trouvé une fonction qui est la fonction cast me donner la réponse ….
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'
Votre réponse semble impliquer que vous voulez que la solution fonctionne avec différents préfixes, pas seulement 'D'
. Si tel est le cas, veuillez considérer l'alternative suivante:
SELECT customer_id, account_id, current_balance FROM daily_account WHERE STUFF(account_id, 1, 1, '') between 1 and 100 ;
Ce qui précède est SQL Server, mais comme votre réponse semble impliquer que vous utilisez MySQL, voici un équivalent MySQL pour vous:
SELECT customer_id, account_id, current_balance FROM daily_account WHERE INSERT(account_id, 1, 1, '') between 1 and 100 ;