J'essaie de savoir comment écrire une instruction SQL qui saisira les champs où la chaîne ne fait pas 12 caractères. Je veux saisir la chaîne uniquement si elle contient 10 caractères.
Quelle fonction peut le faire dans DB2?
J'ai pensé que ce serait quelque chose comme ça, mais je n'y trouve rien.select * from table where not length(fieldName, 12)
Cela récupérera les enregistrements avec des chaînes (dans la colonne fieldName) de 10 caractères:
select * from table where length(fieldName)=10
À partir d'une question similaire DB2 - recherchez et comparez la longueur de la valeur dans un champ de table - ajoutez RTRIM puisque LENGTH renverra la longueur de la définition de la colonne. Cela devrait être correct:
select * from table where length(RTRIM(fieldName))=10
MISE À JOUR 27.5.2019: peut-être que sur les anciennes versions de db2, la fonction LENGTH renvoyait la longueur de la définition de colonne. Sur db2 10.5, j'ai essayé la fonction et elle renvoie la longueur des données, pas la longueur de la définition de colonne:
select fieldname
, length(fieldName) len_only
, length(RTRIM(fieldName)) len_rtrim
from (values (cast('1234567890 ' as varchar(30)) ))
as tab(fieldName)
FIELDNAME LEN_ONLY LEN_RTRIM
------------------------------ ----------- -----------
1234567890 12 10
On peut tester cela en utilisant ce terme:
where length(fieldName)!=length(rtrim(fieldName))