de nombreux processus d'importation de données mainframe (malheureusement commun dans le industr financier y) nécessitent un fichier d'entrée de colonne à largeur fixe qui définit des nombres à virgule flottante avec quelques colonnes pour la valeur entière et quelques colonnes pour la valeur décimale. C'est à dire. ils veulent le nombre 4.019 représenté comme 000401900, où les 4 premiers caractères correspondent à l'entier et les 5 derniers correspondent à la composante décimale.
Pour cette application, vous devez faire beaucoup de manipulation de chaînes, mais un bon début est d'obtenir une requête qui vous donne deux champs contenant 4 et '01900'.
ParseName() couplée à str() le tour est joué:
select integer_part = ltrim(str(4.019,25,0)), decimal_part = parsename(str(4.019, 25, 5),1)
pads str() avec des espaces sur la gauche, de sorte que vous devez Ltrim pour l'entier. Vous pourriez juste lancer un int ici à la place. Parsename ne fait que parser les jetons de chaîne séparés par des points.
Voici un getcha avec cette méthode. Veillez à ne pas embrouiller le type de votre colonne decimal_part de données:
select integer_part = 1, decimal_part = 4
union all
select integer_part = ltrim(str(4.019,25,0)), decimal_part = parsename(str(4.019, 25, 5),1)
résultats dans:
integer_part decimal_part
1 4
4 1900
Ici, le devint destiné '01900' 1900.Ainsi:
select integer_part = 1, decimal_part = cast(4 as varchar(32))
union all
select integer_part = ltrim(str(4.019,25,0)), decimal_part = parsename(str(4.019, 25, 5),1)
résultats dans:
integer_part decimal_part
1 4
4 01900
Impressionnant !!! ........... –
@thyrgle .. est pas 0,9 le reste de la division entière 4.9/1? mais la réponse est grande +1 –
@Gaby: Oui, je pense maintenant que j'y pense, mais je me souviens que quelqu'un a dit que ce n'était pas le cas. –