Newsgroup: it.comp.software.database
Titolo: errore con funzioni cast e convert

ciao a tutti, ho il seguente problema:
dovrei fare una select con un where che contiene una datediff
purtroppo la data in questione č un campo di tipo string es:
datac=200303051200
la mia query č la seguente:
select  
DATEDIFF(day,CAST(LEFT(datac,8) AS datetime),getdate()) as differenza
from tabella
where condizione 
e cosě funziona
ma se io metto nella condizione il datediff (che č la cosa che mi
 interessa)... 
select quellochevoglio from tabella
where DATEDIFF(day,CAST(LEFT(datac,8) AS datetime),getdate())
mi da il seguente errore:
Syntax error converting datetime from character string.
come mai???
non capisco perchč come campo selezionato funzioni, mentre come
 condizione no :o
-- 
SCIRIO - 100% COMMERCIALE - 8 9 2 Z - 8 9 2 Z
http://scirio.altervista.org
http://moofushi.altervista.org
http://ihu.altervista.org
http://x-privat.org
 
http://scirio.altervista.org/cinema/

 condizione no :o
a dire il vero funziona correttamente in entrambi gli utilizzi...
SET NOCOUNT ON
CREATE TABLE #t (
 Id int NOT NULL ,
 d datetime NOT NULL
 )
DECLARE @i int
SET @i = 1
WHILE @i <= 10 BEGIN
 INSERT INTO #t VALUES ( @i , GETDATE())
 SET @i = @i + 1
 WAITFOR DELAY '00:00:02'
END
SELECT * FROM #t
DECLARE @ds varchar(12)
SET @ds = '200601181200'
SELECT *
 FROM #t t
 WHERE DATEDIFF ( day , CAST(LEFT(@ds , 8) AS datetime ) , GETDATE()) = 0
GO
DROP TABLE #t
io verificherei bene cosa contiene la tua [datac]
saluti
-- 
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz/DbaMgr.shtm
 
http://italy.mvps.org
DbaMgr2k ver 0.16.0  -  DbaMgr ver 0.61.0
(my vb6+sql-dmo little try to provide MS MSDE 1.0 and MSDE 2000 a visual 
interface)
--------- remove DMO to reply

 saluti
guarda ho percorso anche quella pista
dato che purtroppo il campo datac è un campo di testo grezzo (non l'ho
 fatto io :p) e che magari avessero date inesistenti
tuttavia ho fatto una prova pratica che dovrebbe escludere questa
 ipotesi:
select substring(datac,1,8) from tabella where id=xxx
--and datediff(day,cast(substring(datac,1,8) as datetime),getdate())>30
and datediff(day,cast('20030225' as datetime),getdate())>30
il campo datac contiene del record con quell'id è 200302252000
facendo la substring diventa 20030225
quindi ho provato commentando una condizione e poi l'altra e
se faccio
and datediff(day,cast('20030225' as datetime),getdate())>30
ovvero lo scrivo io a mano
non da errore
se invece scrivo
and datediff(day,cast(substring(datac,1,8) as datetime),getdate())>30
dove a rigor di logica substring(datac,1,8)=20030225 (lo pesco pure
 nella select)
ecco, in quel caso da errore
l'errore non sta nella datediff, ma proprio nel cast o nel convert
"Syntax error converting datetime from character string"
e non riesco a capire perchè dia errore :o

 ciao a tutti, ho il seguente problema:
Fammi capire, prima rompi i coglioni per mezza usenet e poi hai il
coraggio di chiedere aiuto?
Henryx
-- 
 Signore e signori! Lo avete letto sui giornali! E ora fremerete d'orrore 
 osservando con i vostri stessi occhi il piu` raro e tragico degli 
 scherzi di natura! .. l'uomo medio! 
                                     Joker (Batman: the killing joke)