Diviser un VARCHAR dans DB2 pour récupérer une valeur à l'intérieur
J'ai un VARCHAR
colonne qui contient 5 informations (2 CHAR(3)
et 3 TIMESTAMP
) séparés par des '$
'.
CREATE TABLE MYTABLE (
COL VARCHAR(256) NOT NULL
);
INSERT INTO MYTABLE
VALUES
( 'AAA$000$2009-10-10 10:50:00$null$null$null' ),
( 'AAB$020$2007-04-10 10:50:00$null$null$null' ),
( 'AAC$780$null$2007-04-10 10:50:00$2009-04-10 10:50:00$null' )
;
Je voudrais extraire le 4ème champ ...
'AAA$000$2009-10-10 10:50:00$null$null$null'
^^^^ this field
... pour avoir quelque chose comme
SELECT SPLIT(COL, '$', 4) FROM MYTABLE
1
-----
'null'
'null'
'2009-04-10 10:50:00'
Je suis à la recherche, dans l'ordre :
- Une base de données DB2 construire en fonction de chaîne
- Un intégrable énoncé tel que
SUBSTR(COL, POSSTR(COL)+1)...
- Une fonction définie par l'utilisateur qui se comporte comme
SPLIT
De précision : Oui, je ne sais que ce n'est pas une bonne idée d'avoir ces colonnes...
OriginalL'auteur Steve Schnepp | 2009-08-20
Vous devez vous connecter pour publier un commentaire.
Utilisation:
DETERMINISTIC
et laNO EXTERNAL ACTION
modificateur, pour être en mesure de l'utiliser dans unGROUP BY
clause ?Bon point. Modifié pour renvoyer la valeur NULL lorsque l'élément est introuvable. Demandant premier élément, avec les non-existant-deliemeter sera le retour de la chaîne d'origine.
OriginalL'auteur Toni
Je suis sûr qu'il y est une meilleure façon de l'écrire, mais c'est le 1er (SQL) solution pour le cas simple donnée. Il peut être réécrite comme une procédure stockée de rechercher une chaîne de caractères arbitraire. Il peut aussi y avoir un 3ème partie outils/extensions pour aider à w/split vous voulez...
C'est affreux, mais c'était juste ce dont j'avais besoin pour m'aider avec certains d'analyse de chaînes dans une requête. Merci!
Merci pour la fonction de localisation. Aidé par une autre chaîne d'analyse j'avais besoin de convertir un VARCHAR avec :USD à la fin de celui-ci à un DECMIAL.
OriginalL'auteur nycjay
essayez, ça marche!!!
OriginalL'auteur Jaruek R.
Si votre DB2 version pouvez le faire, vous pouvez utiliser ensuite LOCATE_IN_STRING fonction pour trouvé la position de votre séparateur. Le LOCATE_IN_STRING la fonction renvoie la position de départ d'une chaîne et de vous permettre de choisir la Nième occurrence. Vous pouvez trouver la documentation de cette fonction ici
Pour votre exemple, vous pouvez utiliser ce code :
OriginalL'auteur Esperento57