2016-04-02 1 views
2

Je suis en train de convertir une chaîne à une décimale en utilisant cette commande:casting une chaîne comme décimale dans PSQL

SELECT cast(minimum_ticket_price AS DECIMAL(6,2) 
FROM all_event_details 
WHERE minimum_ticket_price ~ E'^\\d+$'; 

Mais cela ne met pas à jour quoi que ce soit dans ma base de données. Il affiche simplement la colonne sélectionnée dans mon terminal. Dois-je combiner le select avec une mise à jour? J'ai essayé cela mais je dois avoir la syntaxe fausse car je ne suis pas en mesure d'obtenir la conversion enregistrée dans la base de données.

Voici ce que j'ai essayé:

UPDATE all_event_details 
    SET minimum_ticket_price = cast(minimum_ticket_price AS DECIMAL(6,2)) 
WHERE (minimum_ticket_price <> '') IS TRUE;; 
+1

Vous devez t o changer le type de données de la colonne. Vous ne pouvez pas mettre à jour avec une valeur "incorrecte". Mais vous ne pouvez pas changer le type de données tant qu'il y a une seule valeur qui n'est pas ** décimale. Et. 'minimum_ticket_price <> ''' suffit, pas besoin de 'est vrai ' –

Répondre

0

Mise à jour à un type de données qui les données de colonne minimum_ticket_price peuvent soutenir est possible sinon il donnera une erreur. par exemple si le type de données de la colonne minimum_ticket_price est varchar alors votre code doit fonctionner.

0

Que faites-vous? d'abord ajouter une nouvelle colonne, décimal (mais je suis goint suggérer d'utiliser le type de données de base comme précision réelle ou double, sont les plus efficaces)

ALTER TABLE my_table ADD COLUMN minimum_ticket_priceR real ; 

que

UPDATE all_event_details 
    SET minimum_ticket_priceR = to_number(coalesce(minimum_ticket_price,"0"),"999999D99") --for each row 

que je ne suis va suggérer de supprimer la colonne minimum_ticket_price et de renommer l'autre colonne (jamais avec ALTER TABLE): Ce que vous avez fait est de ne pas comprendre, si minimum_ticket_price est une chaîne, vous ne pouvez pas définir un nombre ... et si un nombre n'a aucune signification pour le définir comme chaîne