J'ai une table de client que je veux employer pour peupler une boîte de paramètre dans SSRS 2008. Le cust_num
est la valeur et la concaténation du cust_name
et du cust_addr
sera l'label. Les champs obligatoires de la table sont:
cust_num int PK cust_name char(50) not null cust_addr char(50)
Le SQL est:
select cust_num, cust_name + isnull(cust_addr, '') address from customers
Ce qui me donne ceci dans la list des parameters:
FIRST OUTPUT - ACTUAL 1 cust1 addr1 2 customer2 addr2
Ce qui est ce que j'attendais mais je veux:
SECOND OUTPUT - DESIRED 1 cust1 addr1 2 customer2 addr2
Ce que j'ai essayé:
select cust_num, rsortingm(cust_name) + space(60 - len(cust_name)) + rsortingm(cust_addr) + space(60 - len(cust_addr)) customer from customers
Ce qui me donne la première sortie.
select cust_num, rsortingm(cust_name) + replicate(char(32), 60 - len(cust_name)) + rsortingm(cust_addr) + replicate(char(32), 60 - len(cust_addr)) customer
Ce qui me donne aussi la première sortie.
J'ai aussi essayé de replace space()
par char(32)
et vice versa
J'ai essayé des variations de subssortingng
– subssortingng
, left
, right
tout en vain.
J'ai également utilisé lsortingm
et rsortingm
dans divers endroits.
La raison de la 60 est que j'ai vérifié la longueur maximale dans les deux champs et il est 50 et je veux des espaces entre les champs même si le champ est maxed. Les données tronquées ne m'inquiètent pas vraiment, car la ville, l'état et le code postal se trouvent dans des champs différents, donc si la fin de l'adresse de la rue est coupée, c'est correct, je suppose.
Ce n'est pas un bouchon de spectacle, le rapport SSRS est actuellement déployé avec la première sortie mais je voudrais le rendre plus propre si je le peux.
Whammo blammo (pour les espaces principaux):
SELECT RIGHT(space(60) + cust_name, 60), RIGHT(space(60) + cust_address, 60)
OU (pour les espaces de fin)
SELECT LEFT(cust_name + space(60), 60), LEFT(cust_address + space(60), 60),
Ceci est basé sur la réponse de Jim,
SELECT @field_text + SPACE(@pad_length - LEN(@field_text)) AS RightPad ,SPACE(@pad_length - LEN(@field_text)) + @field_text AS LeftPad
Avantages
Désavantages
Basé sur la réponse de KMier , répond au commentaire que cette méthode pose un problème lorsque le champ à rembourrer n'est pas un champ, mais le résultat d'une fonction (éventuellement compliquée); la fonction entière doit être répétée.
En outre, cela permet de remplir un champ à la longueur maximale de son contenu.
WITH cte AS ( SELECT 'foo' AS value_to_be_padded UNION SELECT 'foobar' ), cte_max AS ( SELECT MAX(LEN(value_to_be_padded)) AS max_len ) SELECT CONCAT(SPACE(max_len - LEN(value_to_be_padded)), value_to_be_padded AS left_padded, CONCAT(value_to_be_padded, SPACE(max_len - LEN(value_to_be_padded)) AS right_padded;