Comment puis-je écrire une requête qui returnne "entre" pour returnner des données alphabétiques, pas seulement numériques?

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 ;