Trasmetti da VARCHAR a INT - MySQL


267

I miei dati attuali per

SELECT PROD_CODE FROM `PRODUCT`

è

PROD_CODE
2
5
7
8
22
10
9
11

Ho provato tutte e quattro le domande e nessuna funziona. ( Rif. )

SELECT CAST(PROD_CODE) AS INT FROM PRODUCT;

SELECT CAST(PROD_CODE AS INT) FROM PRODUCT;

SELECT CAST(PROD_CODE) AS INTEGER FROM PRODUCT;

SELECT CAST(PROD_CODE AS INTEGER) FROM PRODUCT;

Tutti gli errori di sintassi del lancio come di seguito:

Si è verificato un errore nella sintassi SQL; controlla il manuale corrispondente alla versione del tuo server MySQL per la sintassi corretta da usare vicino ') COME INT DA LIMITE DI PRODOTTO 0, 30' alla riga 1

Si è verificato un errore nella sintassi SQL; controlla il manuale corrispondente alla versione del tuo server MySQL per la sintassi corretta da usare vicino a 'INTEGER) DAL LIMITE DI PRODOTTO 0, 30' alla riga 1

Qual è la sintassi giusta per trasmettere varchar all'intero in MySQL?

Versione MySQL: 5.5.16


Quale errore segnala per ogni tentativo? Quali sono i tuoi input? Si suppone che a fallire la query se il cast non riesce per qualsiasi record nel set di risultati. Almeno, questo è ciò che dice lo standard sql, sebbene MySql sia noto per infrangere le regole di sicurezza nello standard. E, per la cronaca, il 2o e il 4o campione elencati sono corretti.
Joel Coehoorn,

Risposte:


552

Come descritto in Funzioni e operatori del cast :

Il tipo per il risultato può essere uno dei seguenti valori:

  • BINARY[(N)]
  • CHAR[(N)]
  • DATE
  • DATETIME
  • DECIMAL[(M[,D])]
  • SIGNED [INTEGER]
  • TIME
  • UNSIGNED [INTEGER]

Pertanto, è necessario utilizzare:

SELECT CAST(PROD_CODE AS UNSIGNED) FROM PRODUCT

7
Unsigned sta funzionando. Da quando MySQL ha cambiato il tipo di dati Integer in Unsigned?
Lenin Raj Rajasekaran,

20
@emaillenin: i tipi di dati per il casting non sono gli stessi di quelli per le colonne, poiché sono necessarie ulteriori informazioni su come interpretare i dati, ad esempio se gli interi sono firmati o meno.
Eggyal

13
Grazie per queste informazioni La documentazione di MySQL è caotica per me, quindi questo mi ha aiutato molto.
Racky,

Ho avuto problemi con CAST (num_col AS DOUBLE (10,2) .. Più tardi l'ho cambiato in DECIMAL (10,2) e ha funzionato. Tnanks
Nava Bogatee

Si noti che su MariaDB CAST(PROD_CODE AS INT) funziona perfettamente.
Paul Spiegel,

57

Per il cast di varchar campi / valori in formato numerico possono essere usati piccoli hack:

SELECT (`PROD_CODE` * 1) AS `PROD_CODE` FROM PRODUCT`

9
Perché mai si dovrebbe usare un tale "hack" quando esiste una soluzione semplice, documentata, supportata e raccomandata?
Eggyal

31
@eggyal TL; DR: l '"hack" di cui parli , è una soluzione semplice, documentata e consigliata. - - - - - - - - - - - - - Versione lunga : dal manuale : anche To cast a string to a number, you normally need do nothing other than use the string value in numeric contextse userei +0invece che *1poiché l'aggiunta è più veloce.
Mindwin,

8
@BrianStinar la risposta accettata mostra chiaramente che esiste una soluzione con semantica migliore, ma a volte è solo conveniente che un valore primitivo venga implicitamente assegnato a un'altra primitiva, specialmente quando si combinano stringhe e tipi numerici. Quindi basarsi casualmente sui linguaggi di programmazione per l'esistenza di questa funzione sembra piuttosto inappropriato.
B12 Toaster,

Non usare questo tipo di hack! - pessima pratica che morderà molto più tardi quando il codice è pieno di questi e difficili da ripristinare
notti

con questa risposta ho scoperto alcune volte finendo con un float64 che il motivo per cui preferirò usareCONVERT('123456',UNSIGNED INTEGER)
Yitzchak Weingarten
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.