Cambiare tipo dati nella vista

mercoledì 09 giugno 2010 - 09.26

Bolo Profilo | Junior Member

Buongiorno!

Domanda forse banale, è possibile cambiare il tipo dati di una colonna in una vista?
Mi spiego meglio, ho una tabella da cui pesco i dati (INIZIO) per la vista con un campo datetime, se però lo inserisco nella vista come CONVERT (NVARCHAR(5),INIZIO, 108) mi rimane datetime, invece mi aspetterei diventasse nvarchar...

alx_81 Profilo | Guru

>Buongiorno!
Ciao

>Domanda forse banale, è possibile cambiare il tipo dati di una colonna in una vista?
>Mi spiego meglio, ho una tabella da cui pesco i dati (INIZIO)
>per la vista con un campo datetime, se però lo inserisco nella
>vista come CONVERT (NVARCHAR(5),INIZIO, 108) mi rimane datetime,
>invece mi aspetterei diventasse nvarchar...
Non ti seguo, cosa devi fare con la vista? Dove la usi? Una vista è solo una query ed, in quanto tale, non è una tabella fisica ma è una "lettura" della tabella o delle tabelle su cui si basa..

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

lbenaglia Profilo | Guru

>Domanda forse banale, è possibile cambiare il tipo dati di una
>colonna in una vista?
>Mi spiego meglio, ho una tabella da cui pesco i dati (INIZIO)
>per la vista con un campo datetime, se però lo inserisco nella
>vista come CONVERT (NVARCHAR(5),INIZIO, 108) mi rimane datetime,
>invece mi aspetterei diventasse nvarchar...

Ciao,

Come fai a verificare il data type della colonna?

USE tempdb; CREATE TABLE dbo.foo( c1 datetime NOT NULL ); INSERT dbo.foo VALUES(CURRENT_TIMESTAMP); GO CREATE VIEW dbo.v_foo AS SELECT CONVERT(varchar(5), c1, 108) AS c2 FROM dbo.foo; GO SELECT * FROM dbo.v_foo; /* Output: c2 ----- 10:31 (1 row(s) affected) */ SELECT c.name, t.name FROM sys.columns AS c JOIN sys.types AS t ON c.user_type_id = t.user_type_id WHERE c.object_id = OBJECT_ID(N'dbo.v_foo'); /* Output: name name ----- --------- c2 varchar (1 row(s) affected) */ DROP VIEW dbo.v_foo; DROP TABLE dbo.foo;

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

Bolo Profilo | Junior Member

Il software che pesca i dati da sql mi legge datetime anche se utilizzo il convert... adesso provo con il tuo metodo a capire che tipo di dati sia...

lbenaglia Profilo | Guru

>Il software che pesca i dati da sql mi legge datetime anche se
>utilizzo il convert...
Si vede che "Il software che pesca i dati da sql" ricasta quella stringa in datetime

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

alx_81 Profilo | Guru

>Il software che pesca i dati da sql mi legge datetime anche se
>utilizzo il convert... adesso provo con il tuo metodo a capire
>che tipo di dati sia...
Potresti passarci il codice che utilizza quella query? credo che la colpa sia proprio di come viene letta. Magari la vista viene castata su un oggetto .net che ha come proprietà un datetime per quel campo..

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Bolo Profilo | Junior Member

IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[CUST_TURNI]'))
DROP VIEW [dbo].[CUST_TURNI]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

CREATE VIEW [dbo].[CUST_TURNI]

(CODICE,
DESCRIZIONE,
SEDE,
INIZIO,
FINE)

AS

SELECT LEFT(CODICE,4)+ '#' + RIGHT(CODICE,2),
CASE
WHEN SUM (CONVERT(INT,Substring(Codice,5,1)))= '6' THEN 'Sabato'
WHEN SUM (CONVERT(INT,Substring(Codice,5,1)))= '7' THEN 'Domenica'
WHEN SUM (CONVERT(INT,Substring(Codice,5,1)))= '5' THEN 'Venerdì'
WHEN SUM (CONVERT(INT,Substring(Codice,5,1)))= '15' THEN 'Lunedì - Venerdì'
WHEN SUM (CONVERT(INT,Substring(Codice,5,1)))= '21' THEN 'Lunedì - Sabato'
WHEN SUM (CONVERT(INT,Substring(Codice,5,1)))= '28' THEN 'Lunedì - Domenica'
WHEN SUM (CONVERT(INT,Substring(Codice,5,1)))= '10' THEN 'Lunedì - Giovedì'
WHEN SUM (CONVERT(INT,Substring(Codice,5,1)))<> '28' THEN 'NO'
WHEN SUM (CONVERT(INT,Substring(Codice,5,1)))<> '21' THEN 'NO'
WHEN SUM (CONVERT(INT,Substring(Codice,5,1)))<> '15' THEN 'NO'
WHEN SUM (CONVERT(INT,Substring(Codice,5,1)))<> '10' THEN 'NO'
WHEN SUM (CONVERT(INT,Substring(Codice,5,1)))<> '5' THEN 'NO'
WHEN SUM (CONVERT(INT,Substring(Codice,5,1)))<> '6' THEN 'NO'
WHEN SUM (CONVERT(INT,Substring(Codice,5,1)))<> '7' THEN 'NO'
END ,
SEDE,
INIZIO, --CONVERT (NVARCHAR(5),INIZIO, 108),
FINE --CONVERT (NVARCHAR(5),FINE, 108)

FROM dbo.CUST_TURNISTICA

WHERE INATTIVO <> '+'

GROUP BY LEFT(CODICE,4), RIGHT(CODICE,2), SEDE, INIZIO, FINE



Se i campi INIZIO e FINE sono così come nel codice mi restituisce il datetime intero (es 01-GEN-2010 13:00), però volevo tramite CONVERT (NVARCHAR(5),INIZIO, 108) mettere la sola ora visto che la data è costante per tutti i record e non mi interessa...
Con il CONVERT il software mi conteggia i record ma si impalla e non ne visualizza nemmeno uno...

lbenaglia Profilo | Guru

>Con il CONVERT il software mi conteggia i record ma si impalla
>e non ne visualizza nemmeno uno...
LOL
E noi cosa possiamo fare?

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

Bolo Profilo | Junior Member

Credo nulla... ma il collega di forum voleva vedere il codice... mai porre limiti alla provvidenza

lbenaglia Profilo | Guru

>Credo nulla... ma il collega di forum voleva vedere il codice...
>mai porre limiti alla provvidenza
Ale voleva vedere il pezzetto di codice sorgente dell'applicazione client che richiama la tua vista/query

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

Bolo Profilo | Junior Member

Ahhhh sì, in effetti sono pirla io

Purtroppo è un software di terze parti acquistato quindi non saprei dove trovare il codice... quindi niente da fare, penserò soluzioni alternative quali per esempio aggiungere una colonna che con qualche barbatrucco mi restituisca un campo carattere...

Grazie cmq

Bolo Profilo | Junior Member

Ahhhh sì, in effetti sono pirla io

Purtroppo è un software di terze parti acquistato quindi non saprei dove trovare il codice... quindi niente da fare, penserò soluzioni alternative quali per esempio aggiungere una colonna che con qualche barbatrucco mi restituisca un campo carattere...

Grazie cmq

alx_81 Profilo | Guru

>Ahhhh sì, in effetti sono pirla io
Non ti buttare così giù

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Bolo Profilo | Junior Member

Beh con SQL e dintorni è una triste realtà la mia pirlaggine... non parto da una base solida, procedo per tentativi, ma i risultati ci sono per ora...

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