Probelmi di date

giovedì 20 aprile 2006 - 15.54

Mauro1971 Profilo | Newbie

Ciao a tutti, mi serviva un aiuto perchè stò uscendo pazzo da 3 giorni....

Devo inserire una data in una tabella SQL tramite interfaccia ASP, posto qua il problema perchè riguarda SQL e non la pag ASP.

Infatti con il <%Respoonse.Write("dataInsert")%> il valore visualizzato è corretto.
SQL però mi inserisce SEMPRE la data come 01/01/1990.
Uso SQL 2000 ITA, il tipo di dato della tabella è "smalldatetime".

Ecco come ho fatto:

Metodo 1:
data=Date()
dataInsert=FormatDateTime(data, vbShortDate)

Metodo 2:
data=Date()
FormatDateTime=day(data)&"-"&month(data)&"-"&year(data)
Oppure anzichè il simbolo "-" ho provato con "/"

Ed altri metodi che sinceramente ora non ricordo, ma non hanno funzionato!!!!

Ho pure provato a convertire in stringa la data, ma nulla.

Se mi aiutate ve ne sarei moooolto grato.

lbenaglia Profilo | Guru

>Ecco come ho fatto:
>
>Metodo 1:
> data=Date()
> dataInsert=FormatDateTime(data, vbShortDate)
>
>Metodo 2:
> data=Date()
>FormatDateTime=day(dataInsert)&"-"&month(dataInsert)&"-"&year(dataInsert)
> Oppure anzichè il simbolo "-" ho provato con "/"
>
>Ed altri metodi che sinceramente ora non ricordo, ma non hanno
>funzionato!!!!
>
>Ho pure provato a convertire in stringa la data, ma nulla.

Ciao Mauro1971,

utilizza il formato ISO 'YYYYMMDD' e non avrai problemi.
Leggi attentamente il seguente tip:
http://www.dotnethell.it/tips/SQLServerDates.aspx

>Se mi aiutate ve ne sarei moooolto grato.
Prego.

Ciao!

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

Mauro1971 Profilo | Newbie

Grazie per la risposta.

Avevo già notato quel thread, però io devo inserire no una data specifica ma la datta esatta al momento dell'inserimento.

Calcola che sono uno agli inizi e non conosco molti trucchi del mestiere, sopratutto in SQL.

Io faccio:
INSERT INTO miaTabella (mioCampo) VALUE (dataInsert).

Dove dataInsert è la mia variabile che contiene la data.

Mi sembra che sia la stessa cosa, no?

lbenaglia Profilo | Guru

>Grazie per la risposta.
Di nulla.

>Avevo già notato quel thread, però io devo inserire no una data
>specifica ma la datta esatta al momento dell'inserimento.
>
>Calcola che sono uno agli inizi e non conosco molti trucchi del
>mestiere, sopratutto in SQL.
>
>Io faccio:
>INSERT INTO miaTabella (mioCampo) VALUE (dataInsert).
>
>Dove dataInsert è la mia variabile che contiene la data.
>
>Mi sembra che sia la stessa cosa, no?

Certo, l'importante è formattare la data seguendo lo standard ISO 'YYYYMMDD'.
In questo caso, però, io adotterei una soluzione diversa.
Supponiamo di dover inserire un ordine e voler valorizzare automaticamente la data ordine con la data di inserimento.
In questo caso è sufficiente definire un constraint DEFAULT con il quale valorizzare automaticamente la colonna.
Ti allego un piccolo esempio:

USE tempdb; GO CREATE TABLE dbo.Orders( OrderID int NOT NULL IDENTITY PRIMARY KEY, OrderDate smalldatetime NOT NULL DEFAULT GETDATE(), EmployeeName varchar(10) NOT NULL, ); GO INSERT dbo.Orders(EmployeeName) VALUES ('Lorenzo'); WAITFOR DELAY '00:01:00' INSERT dbo.Orders(EmployeeName) VALUES ('Luca'); WAITFOR DELAY '00:02:00' INSERT dbo.Orders(EmployeeName) VALUES ('Andrea'); GO SELECT * FROM dbo.Orders; GO /* Output: OrderID OrderDate EmployeeName ----------- ----------------------- ------------ 1 2006-04-20 16:18:00 Lorenzo 2 2006-04-20 16:19:00 Luca 3 2006-04-20 16:21:00 Andrea (3 row(s) affected) */ DROP TABLE dbo.Orders;


Nel caso tu debba inserire solo la colonna data, puoi ricorrere alla keyword DEFAULT:

USE tempdb; GO CREATE TABLE dbo.Orders( OrderID int NOT NULL IDENTITY PRIMARY KEY, OrderDate smalldatetime NOT NULL DEFAULT GETDATE(), ); GO INSERT dbo.Orders VALUES (DEFAULT); WAITFOR DELAY '00:01:00' INSERT dbo.Orders VALUES (DEFAULT); WAITFOR DELAY '00:02:00' INSERT dbo.Orders VALUES (DEFAULT); GO SELECT * FROM dbo.Orders; GO /* Output: OrderID OrderDate ----------- ----------------------- 1 2006-04-20 16:25:00 2 2006-04-20 16:26:00 3 2006-04-20 16:28:00 (3 row(s) affected) */ DROP TABLE dbo.Orders;

Ciao!

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

Mauro1971 Profilo | Newbie

Praticamente la keyword DEFAULT in cosa consiste...al formato yyyy-mm-dd della data?
Se così, allora sì che posso leggerla dal DB con la funzione CONVERT di cui all'articolo che mi hai suggerito, provo subito.

Provato, il risultato è campo NULL....allora mi sà che non ho capito na mazza.
-------------------------------------------------------------
Chi parla ad alta voce si fà sentire.
Chi parla a bassa voce si fà ascoltare.

lbenaglia Profilo | Guru

>Praticamente la keyword DEFAULT in cosa consiste...al formato
>yyyy-mm-dd della data?

No. la keyword DEFAULT la utilizzi in fase di INSERT/UPDATE quando vuoi inserire/aggiornare una colonna sulla quale è stato definito un constraint DEFAULT utilizzando il valore restituito dal constraint stesso.

>Se così, allora sì che posso leggerla dal DB con la funzione
>CONVERT di cui all'articolo che mi hai suggerito, provo subito.

Eh?! Cosa non ti è chiaro nei due esempi che ti ho postato?

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

Mauro1971 Profilo | Newbie

AAAA aspetta, siccome ho creato la tabella con Enterprise manager, devo aggiungere al campo smalldate anche GETDATA() DEFAULT e NOTNULL.
Devo ricreare la tabella via cod SQL, mo faccio.


Perfetto!!!!!! Con questo modo non dà problemi quando il giorno è inferirore a 12, inverte il mese col giornio?
Ora l'ideale sarebbe riuscire ad eliminare l'ora, a mè interesserebbe solo la data e basta
-------------------------------------------------------------
Chi parla ad alta voce si fà sentire.
Chi parla a bassa voce si fà ascoltare.

lbenaglia Profilo | Guru

>AAAA aspetta, siccome ho creato la tabella con Enterprise manager,
>devo aggiungere al campo smalldate anche GETDATA() DEFAULT e
>NOTNULL.
>Devo ricreare la tabella via cod SQL, mo faccio.

Supponendo di avere la tabella dbo.Orders e la colonna OrderDate puoi utilizzare il comando:

ALTER TABLE dbo.Orders ALTER COLUMN OrderDate smalldatetime NOT NULL; ALTER TABLE dbo.Orders ADD CONSTRAINT DF_OrderDate DEFAULT GETDATE() FOR OrderDate;

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

Mauro1971 Profilo | Newbie

Un'ultima cosa e poi potrei anche sposarti .

> inserire/aggiornare una colonna sulla quale è stato definito un constraint DEFAULT utilizzando il valore restituito dal constraint stesso.

Siccome non sono una cima in SQL, il constraint sarebbe?
Poi se ho capito bene (e vorrei capire bene) generalizzando, il valore DEFAULT restituisce la data in questo caso poichè nel valore predefinito c'è (GETDATE()), potrebbe esserci anche ad esempio la stringa ('pippo'), in caso INSERT/UPDATE nel campo apparirebbe "pippo" se fosse un campo di tipo TEXT?
-------------------------------------------------------------
Chi parla ad alta voce si fà sentire.
Chi parla a bassa voce si fà ascoltare.

lbenaglia Profilo | Guru

>Un'ultima cosa e poi potrei anche sposarti .

Oh mamma, se ti chiamassi Federica, Alessandra, o comunque con un nome di fanciulla potremmo anche approfondire il discorso, ma onestamente Mauro non mi ispira

>Siccome non sono una cima in SQL, il constraint sarebbe?

Un vincolo sui dati. Esistono diversi tipi di constraint ognuno con le proprie caratteristiche che trovi elencate in questo paragrafo dei Books Online:

"Enforcing Data Integrity"
http://msdn2.microsoft.com/en-US/library/ms190765.aspx

>Poi se ho capito bene (e vorrei capire bene) generalizzando,
>il valore DEFAULT restituisce la data in questo caso poichè nel
>valore predefinito c'è (GETDATE()), potrebbe esserci anche ad
>esempio la stringa ('pippo'), in caso INSERT/UPDATE nel campo
>apparirebbe "pippo" se fosse un campo di tipo TEXT?

Esattamente, hai capito "bravo"

Ciao!

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

Mauro1971 Profilo | Newbie

Grandeee tu che spieghi da dio e io che capisco quasi al volo
Grazie 1000.
-------------------------------------------------------------
Chi parla ad alta voce si fà sentire.
Chi parla a bassa voce si fà ascoltare.
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