Verificare se un campo di una tabella è un numero

venerdì 08 febbraio 2008 - 09.04

actarus1981 Profilo | Junior Member

Ciao a tutti,
ho una tabella che contiene un campo di tipo testo, e vorrei verificare quanti dei record di questo campo sono numeri. Se per esempio ho questi valori:
0a3d
0015
af1d
1234

Vorrei avere un output che identifica 2 campi come testo e 2 come numeri.

Grazie

Fabio

lbenaglia Profilo | Guru

>ho una tabella che contiene un campo di tipo testo, e vorrei
>verificare quanti dei record di questo campo sono numeri. Se
>per esempio ho questi valori:
>0a3d
>0015
>af1d
>1234
>
>Vorrei avere un output che identifica 2 campi come testo e 2
>come numeri.

Ciao Fabio,

Se utilizzi SQL Server potresti ricorrere alla funzione ISNUMERIC():

USE tempdb; CREATE TABLE dbo.t( c char(4) NOT NULL ) INSERT dbo.t VALUES('0a3d'); INSERT dbo.t VALUES('0015'); INSERT dbo.t VALUES('af1d'); INSERT dbo.t VALUES('1234'); SELECT c , CASE ISNUMERIC(c) WHEN 1 THEN 'Numero' ELSE 'Testo' END AS Tipo FROM dbo.t; /* Output: c Tipo ---- ------ 0a3d Testo 0015 Numero af1d Testo 1234 Numero (4 row(s) affected) */ WITH CTE_Tipo AS ( SELECT CASE ISNUMERIC(c) WHEN 1 THEN 'Numero' ELSE 'Testo' END AS Tipo FROM dbo.t ) SELECT Tipo, COUNT(*) AS Numero FROM CTE_Tipo GROUP BY Tipo; /* Output: Tipo Numero ------ ----------- Numero 2 Testo 2 (2 row(s) affected) */ DROP TABLE dbo.t;

Per maggiori dettagli consulta il seguente paragrafo sui Books Online:

"ISNUMERIC (Transact-SQL)"
http://technet.microsoft.com/it-it/library/ms186272.aspx

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

actarus1981 Profilo | Junior Member

Ciao, perfetto, era proprio quello che mi serviva!

Grazie

Fabio

Pongo Profilo | Senior Member

WITH CTE_Tipo AS ( SELECT CASE ISNUMERIC(c) WHEN 1 THEN 'Numero' ELSE 'Testo' END AS Tipo FROM dbo.t ) SELECT Tipo, COUNT(*) AS Numero FROM CTE_Tipo GROUP BY Tipo;

Lorenzo, scusa, ma che cos'è quel "Whit" ??

Se non ho capito male crei una tb temporanea chiamata CTE_Tipo? C'è nel 2000??

lbenaglia Profilo | Guru

>Lorenzo, scusa, ma che cos'è quel "Whit" ??
WITH è una nuova keyword utilizzata per definire una Common Table Expression:
http://msdn2.microsoft.com/en-us/library/ms175972.aspx

>Se non ho capito male crei una tb temporanea chiamata CTE_Tipo?
Si, in questo caso la CTE definisce una sorta di "vista temporanea" che provvedo ad interrogare con la successiva SELECT, ma le CTE sono molto comode per scrivere query ricorsive.

>C'è nel 2000??
No, le CTE sono state introdotte con SQL Server 2005.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5