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.