2017-08-31 3 views
1

J'essaye de trier une colonne dans une table où la valeur dans la colonne est dans le format 00000197-001-00001 et ainsi de suite.Comment trier une colonne en SQL sur la base de la valeur B où les valeurs dans les champs sont au format A-B-C. Je w

J'ai essayé avec requête

select * from <table name> where <condition> order by column name.

Les valeurs sont triées jusqu'à 00000197-099-001. Mais après cela, la valeur que je reçois est 00000197- -001 dans ma liste à la place 00000197- -001.

Le résultat que je reçois:

00000197-097-000001

00000197-098-000001

00000197- -000001

00000197- -000001

00000197- -000001

00000197-1001-000001

00000197-1002-000001

00000197-1003-000001

00000197-1004-000001

00000197- 1005-000001

00000197-1006-000001

00000197-1007-000001

00000197-1008-000001

00000197-1009-000001

00000197- -000001

00000197- -000001

00000197- -00 0001

00000197-1012-000001

Résultat attendu:

00000197-097-000001

00000197-098-000001

00000197- -000001

00000197- -000001

00000197-101-000001

.

.

.

00000197- -000001

00000197- -000001

00000197-1001-000001

00000197-1002-000001

00000197-1003-000001

.

.

.

Veuillez suggérer la solution. Merci beaucoup d'avance.

Répondre

0

Compte tenu de vos données d'échantillon, vous pouvez le faire:

order by len(column1), column1 

Cette idée fonctionnera dans une base de données, bien que la fonction de la longueur peut être length() plutôt que len().

+0

Merci cela fonctionne parfaitement pour moi. – Shan

1

Essayez cette

SELECT * 
    FROM MyTable1 
ORDER BY CAST(SUBSTRING(SUBSTRING(MyCol1, CHARINDEX('-', MyCol1, 0) + 1, 100), 0, CHARINDEX('-', substring(MyCol1, CHARINDEX('-', MyCol1, 0) + 1, 100), 0)) as int) 

Cela fonctionne pour chaque chaîne de longueur au format X-Y-Z.

+0

Cela ne m'a pas aidé, je reçois maintenant les résultats comme suit: 00000197-097-000001 00000197-098-000001 00000197 - ** 099 ** - 000001 00000197 - ** 1007 ** -000001 00000197 - ** 1003 ** - 000001 00000197 - ** 1009 ** - 000001 00000197 - ** 100 ** - 000001 00000197-1002-000001 00000197-1004-000001 00000197 -1008-000001 00000197-1001-000001 00000197-1005-000001 00000197-1000-000001 00000197-1006-000001 00000197-1016-000001 00000197-1018-000001 00000197-1010-000001 – Shan

+0

Oui, je ne vois pas les chiffres ci-dessus 1000 dans vos données d'échantillon. J'ai mis à jour la réponse. –

+0

Cela ne fonctionne pas non plus pour moi .. Je reçois des erreurs dans cette requête. For CAST Je reçois: Fonction CAST nécessaire 1 argument (s). Pour Select (near CAST): Syntaxe incorrecte près de Select. J'ai également fourni le nom de colonne à la place de @MyCol, et j'obtiens une erreur de nom de colonne invalide. Il y a aussi un support de fermeture supplémentaire actuellement. – Shan