campi data in mysql | SQL & MySQL

Topic: Pubblico - Composto da 4 Posts di 2 Utenti.

05 Dicembre, 2011 11:52 #1
ffabio75
Utente

ffabio75
Registrato: Dec, 2011
Posts: 8
Offline

Buongiorno a tutti,
mi sto avvicinando al mysql, e ho subito un problema :

ho una tabella fatta così :

CREATE TABLE `t_tariffario` (
`cod_prod` varchar(1) DEFAULT NULL,
`DESCRIZIONE` varchar(70) DEFAULT NULL,
`DATA_INIZIO` date DEFAULT NULL,
`DATA_FINE` date DEFAULT NULL,
`PREZZO` varchar(7) DEFAULT NULL
)

esempio :
1 primo prezzo 01/01/2010 31/12/2010 130
1 secondo prezzo 01/01/2011 120

in dase alla data che pago o che ho pagato mi deve restituire il prezzo corretto .

se pago oggi mi deve restituire 120 se ho pagato il 01/04/2010 mi deve restituire 130.

select * from t_tariffario where data_inizio < "2010-11-04" and data_fine > "2010-11-04"
e mi restituisce giusta 130.

se metto una data di oggi non mi restituisce nulla.
penso il problema sia sul campo data fine null .
allora ho provato a scrivere cosi'
select * from t_tariffario where "2010-11-04" between data_inizio and ifnull(data_fine,sysdate())
niente . :-((((

grazie.

05 Dicembre, 2011 14:58 #2
re-verse
Moderatore

re-verse
Registrato: Jul, 2008
Posts: 312
Offline

Ciao,
mi sembra un po' complicato come sistema di calcolo dei prezzi... sostanzialmente, giusto per chiarirci, se hai dei prezzi per 'range' di date, perchè non imposti la data fine anche a quello da 130?


Salvatore DC

La mente è come un paracadute: funziona solo se si apre. A.Einstein.

05 Dicembre, 2011 16:20 #3
ffabio75
Utente

ffabio75
Registrato: Dec, 2011
Posts: 8
Offline

Si ho aggirato l' ostacolo in questo modo , inserendo una data di fine validità molto avanti tipo 2020 .
Il mio problema è che non so quando cambia quindi quando cambiava un prezzo inserivo il nuovo prezzo e andavo a fare un update sul valore precedente - 1 gg nel campo fine.

se non ho la data fine era il valore attuale .

select * from t_tariffario where "2010-11-04" between data_inizio and ifnull(data_fine,sysdate())

in oracle avrei scritto nvl(data_fine,sysdate())

del tipo se è nullo il campo considera la data di oggi.

grazie

05 Dicembre, 2011 16:38 #4
re-verse
Moderatore

re-verse
Registrato: Jul, 2008
Posts: 312
Offline

Prova un pò così:

1SELECT * FROM
2t_tariffario
3WHERE DATA_INIZIO<='2011-12-05'
4AND(DATA_FINE>='2011-12-05' OR ISNULL(DATA_FINE))

Ad ogni modo ti consiglierei di non usare il maiuscolo per ii nomi dei campi :) ... formalità che però aiutano ;)

Ultima modifica 05 Dicembre, 2011 16:38 di re-verse


Salvatore DC

La mente è come un paracadute: funziona solo se si apre. A.Einstein.

Condividi su:

Loggati o Registrati per replicare