-1
votes

Comment vérifier si la première lettre de VARCHAR est toujours un alphabet

Je suis nouveau dans sql et lors de la création de ma table, y a-t-il un moyen de vérifier / faire respecter que la première lettre est toujours un alphabet? Par exemple. <alphabet><numbers>

Par exemple,

CREATE TABLE TESTING
(
    TestID VARCHAR(6),
    CONSTRAINT TestPK PRIMARY KEY (TestID)
);

Lors de l' insertion de nouvelles données dans le TESTING table, il devrait être T12345 et invites une erreur si l'entrée est 12345 par exemple?

J'ai quelques tables dans lesquelles chacune d'elles a son propre identifiant (de 6 chiffres) et par conséquent, j'ai pensé qu'il serait plus facile de leur donner un préfixe d'alphabet (par exemple, s'il s'agit d'une table Client, ce sera C etc) pour que je puisse visualiser mes tables / contenus de manière plus claire ... Ainsi le type de données utilisé est VARCHAR car c'est une valeur alphanumérique par opposition à INT que j'ai utilisé initialement.


1 commentaires

"J'ai quelques tables dans lesquelles chacune d'elles a son propre identifiant (de 6 chiffres) et par conséquent, j'ai pensé qu'il serait plus facile de leur donner un préfixe d'alphabet (par exemple, s'il s'agit d'une table Client, cela va be C etc) pour que je puisse visualiser mes tableaux / contenus de manière plus claire ".... Ne le faites pas. Utilisez simplement l'entier. Si vous voulez le visualiser plus facilement, lorsque vous AFFICHEZ les données, préfixez un C (ou le caractère de votre choix), mais n'ajoutez pas de caractère par ailleurs redondant et changez votre type de données juste pour changer la façon dont il s'affiche.


3 Réponses :


0
votes

Utilisez REGEXP_LIKE() pour ajouter une contrainte pour TestID :

CREATE TABLE TESTING
(
    TestID VARCHAR(6),
    CONSTRAINT TestPK PRIMARY KEY (TestID),
    CONSTRAINT first_letter CHECK (REGEXP_LIKE(TestID, '^[A-Z]'))
);

Si vous voulez que le premier caractère soit une lettre majuscule, alors c'est plus simple:

CREATE TABLE TESTING
(
    TestID VARCHAR(6),
    CONSTRAINT TestPK PRIMARY KEY (TestID),
    CONSTRAINT first_letter CHECK (REGEXP_LIKE(TestID, '^[A-Za-z]'))
);


0 commentaires

0
votes

J'ai quelques tables dans lesquelles chacune d'elles a son propre identifiant (de 6 chiffres) et par conséquent, j'ai pensé qu'il serait plus facile de leur donner un préfixe d'alphabet (par exemple, s'il s'agit d'une table Client, ce sera C etc) pour que je puisse visualiser mes tableaux / contenus de manière plus claire.

En tant que défi de cadre, vous feriez mieux de ne pas utiliser cette approche et de conserver l' ID sous forme de type de données NUMBER , puis si vous voulez un préfixe, ajoutez-le lorsque la valeur est affichée:

    ID | FORMATTED_ID
-----: | :-----------
     1 | C000001     
123456 | C123456     

Si vous avez les données:

SELECT * FROM customer;

Ensuite, lorsque vous souhaitez AFFICHER les données, formatez-les avec le préfixe:

ALTER TABLE customer ADD (
  FORMATTED_ID VARCHAR2(7)
               GENERATED ALWAYS AS ( 'C' || CAST( TO_CHAR( id, 'FM000000' ) AS VARCHAR(6) ) )
);

Les sorties:

| ID      |
| :------ |
| C000001 |
| C123456 |

Si vous le souhaitez, vous pouvez l'ajouter en tant que colonne générée à la table:

SELECT 'C' || TO_CHAR( id, 'FM000000' ) AS id
FROM   customer;

Ensuite:

INSERT INTO customer ( id )
SELECT 1 FROM DUAL UNION ALL
SELECT 123456 FROM DUAL;

Les sorties:

CREATE TABLE customer
(
    ID NUMBER(6,0) CONSTRAINT customer_id_pk PRIMARY KEY
);

db <> violon ici


0 commentaires

0
votes

Ceci s'ajoute à la réponse des MTO. Je ne pense pas que ce que vous voulez faire soit même nécessaire. Le nombre est bien. Pourquoi?

Vous avez choisi une bonne convention de dénomination pour vos colonnes - <entity name>ID . Ainsi, lorsque vous regardez les résultats d'une requête, vous aurez une colonne TestID . C'est l'identifiant de la table Test .

Problème résolu avec une convention de dénomination que vous utilisez déjà.


0 commentaires