126 messaggi dal 26 agosto 2009
Biongiorno,
su di una tabella ho una colonna Pippo con una stringa con scritto 8*2
Vorrei fare Select Pippo From Tabella e che mi restituisse 16.

Come faccio ??
anche se faccio
Select Convert(float,'8.2')
mi da errore.

Grazie,
Claudio
salve Claudio,
cosi', ovviamente, NON si puo' fare...
il risultato puo' essere fatto, ma e' molto pesante ed articolato, in quanto devi prendere la "stringa" del valore, farne il parsing, e convertire l'operazione nella sua corrispettiva matematica...
se quindi
SELECT colValore FROM tabella WHERE ...
restituisce
'8*2'
devi caricare in qualche modo
DECLARE @expression varchar(100) = '';
SELECT @expression = colValore FROM tabella WHERE ...
e da qui separare gli operatori dai "numeri" e convertire il tutto nel risultato...

oppure, ma devi essere certo di quello che c'e' in colValore, cioe' che non ci siano "problemi" nella valorizzazione della stessa, e quindi definisci un SQL dinamico completo dell'operazione che va eseguita recuperando l'espressione dalla colonna e poi esegui TUTTO quello che ti serve tramite sp_executesql...
trvialmente, una "schifezza" simile a
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.t (
  Id int,
  ColValore varchar(10)
  );

INSERT INTO dbo.t
  VALUES (1 , '8*2'), (2, '5+7');

DECLARE @id int = 1;
SELECT *
  FROM dbo.t t
  WHERE t.Id = @id;

DECLARE @expression varchar(8000) = ''
DECLARE @cmd nvarchar(MAX) = ''

SELECT @expression = t.ColValore 
  FROM dbo.t t
  WHERE t.Id =  @id;
  
SELECT @cmd = 
'SELECT t.Id, ' + @expression + ' AS [Expression]
  FROM dbo.t t
  WHERE t.Id = ' + CONVERT(varchar, @id);

PRINT 'Codice generato';
SELECT @cmd;

PRINT 'Esecuzione dinamica';
EXECUTE sp_executesql @cmd;
GO
DROP TABLE dbo.t;
--<---------
Id          ColValore
----------- ----------
1           8*2

Codice generato

---------------------------------------
SELECT t.Id, 8*2 AS [Expression]
  FROM dbo.t t
  WHERE t.Id = 1

Esecuzione dinamica
Id          Expression
----------- -----------
1           16



il tutto e' in qualche modo "arricchibile" passando meglio i parametri alla procedura sp_executesql, e vedrai meglio la sinossi della stessa presso https://docs.microsoft.com/it-it/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql?view=sql-server-2017
salutoni
--
Andrea

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.