DB2 - Comment vérifier si le champ de type varchar valeur a entiers
Est-il intégré DB2 fonction ou de toute requête pour vérifier si le personnage que j'ai est un nombre?
(Je ne peut pas utiliser les fonctions définies par l'utilisateur)
ASCII Fonction
Retourne le code ASCII de la valeur de la plus à gauche du caractère de l'argument un nombre entier.
Cela fonctionne uniquement si la chaîne op a est un caractère longueur Pourquoi ne pas simplement dire "où c entre '0' et '9'"? il demande "si le personnage que j'ai est le nombre?"
La réponse par xQbert n'est pas tout à fait correct.
Ce que vous avez réellement besoin est une * pour chaque caractère dans la fromString (et l'espace doit être supprimé) et la longueur de la chaîne doit être la même que la longueur de la chaîne d'origine.
Le xQbert réponse est tout à fait correct; il n'a tout simplement pas comprendre une explication. Un "" n'est pas nécessaire pour every character. Un seul "" est utilisé en particulier parce qu'il serait TRANSLATE() uniquement l'espace à gauche de la à partir de-string alors que tous les chiffres deviennent des espaces. Les autres personnages sont inchangés. Si seuls les chiffres sont là, ils vont tous être en blanc; LONGUEUR(TRIM()) soit nulle.
Retourne numérique, où char champ est tous les objets numériques avec aucun ou espaces. ie; Tous les caractères dans le champ numérique:
where translate(char_field,'X ',' 0123456789')=' '
Retourne les valeurs non numériques avec de grands espaces considérés comme non-numérique, mais les espaces de fin ignoré. c'est -; non-numérique si il y a des espaces, mais pas si il y a des espaces. C'est un événement commun pour mainframe/Cobol-chargé des champs:
Retourne numérique avec fuite, mais pas les espaces après la valeur. ie; les espaces sont considérés comme non-numérique, mais les espaces sont ignorés. De nouveau, commun pour mainframe/Cobol CHAR champs:
J'ai fait plus d'erreurs de la version basée sur l'idée xQbert exposés, a ajouté intermedia résultat, quelques exemples et to_integer colonne qui convertit une chaîne de valeur en toute sécurité en entier:
Doc Lien
OriginalL'auteur xQbert
Il existe de nombreuses approches. Jetez un oeil à cette solution à l'aide de seulement deux fonctions:
En général, à moins de fonctions - de meilleures performances 🙂
OriginalL'auteur Mita
Utiliser ASCII fonction permettant d'obtenir la valeur du caractère et de la comparer qu'elle est entre 48 '0' et 57 '9'
Table ASCII
ASCII Fonction
Retourne le code ASCII de la valeur de la plus à gauche du caractère de l'argument un nombre entier.
Pourquoi ne pas simplement dire "où c entre '0' et '9'"?
il demande "si le personnage que j'ai est le nombre?"
OriginalL'auteur Atilla Ozgur
si vous avez la version de db2 pouvez utiliser regexp_like vous pouvez le faire:
nombre avec le "." comme symbole décimal:
numéro "," comme symbole décimal:
nombre sans virgule décimale ( entier seulement, votre demande)
OriginalL'auteur Esperento57
La réponse par xQbert n'est pas tout à fait correct.
Ce que vous avez réellement besoin est une * pour chaque caractère dans la fromString (et l'espace doit être supprimé) et la longueur de la chaîne doit être la même que la longueur de la chaîne d'origine.
de sorte qu'il ressemble à ceci:
every character
. Un seul "" est utilisé en particulier parce qu'il serait TRANSLATE() uniquement l'espace à gauche de la à partir de-string alors que tous les chiffres deviennent des espaces. Les autres personnages sont inchangés. Si seuls les chiffres sont là, ils vont tous être en blanc; LONGUEUR(TRIM()) soit nulle.OriginalL'auteur Ruben van Straten
Retourne numérique, où char champ est tous les objets numériques avec aucun ou espaces. ie; Tous les caractères dans le champ numérique:
Retourne les valeurs non numériques avec de grands espaces considérés comme non-numérique, mais les espaces de fin ignoré. c'est -; non-numérique si il y a des espaces, mais pas si il y a des espaces. C'est un événement commun pour mainframe/Cobol-chargé des champs:
Retourne numérique avec fuite, mais pas les espaces après la valeur. ie; les espaces sont considérés comme non-numérique, mais les espaces sont ignorés. De nouveau, commun pour mainframe/Cobol CHAR champs:
Retourne numérique avec de grands & espaces. ie; ignore attaque et de fuite des espaces dans la détermination du champ est "numérique":
OriginalL'auteur user3473636
J'ai fait plus d'erreurs de la version basée sur l'idée xQbert exposés, a ajouté intermedia résultat, quelques exemples et to_integer colonne qui convertit une chaîne de valeur en toute sécurité en entier:
Le résultat de cet exemple est:
OriginalL'auteur Robert Lujo