Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

conversione stringa in data (SQL)

488 views
Skip to first unread message

Ammammata

unread,
Jun 12, 2023, 11:04:09 AM6/12/23
to
ho un campo testo dove l'utente inserisce una data tipo "gg.mm.aa"
oppure una settimana "week XX" (senza virgolette)

devo convertire la data/testo in data/data e quando c'è la settimana in
data/lunedì della settimana

quindi una data/testo 15.06.23 diventa 15/06/2023 e una week 24 diventa
12/06/2023 (oggi)

tornando al mio problema, sarà che oggi è un lunedì, non riesco a
trasformare con una query SQL questo campo in date gestibili come date

ho cominciato con i record che contengono una data/testo, le righe con
week le smazzo dopo che ho risolto il primo intoppo

le due righe di query che ho scritto mi preparano la data in due
formati: quello corrispondente alle impostazioni regionali del pc
(dd/MM/yyyy) e quello ISO (yyyyMMdd) (entrambe ancora in formato testo)

esempio:

Prod_Date ProdDate1 ProdDate2
01.04.23 01/04/2023 20230401
01.06.23 01/06/2023 20230601
03.06.23 03/06/2023 20230603
03.07.23 03/07/2023 20230703
04.04.23 04/04/2023 20230404
04.05.23 04/05/2023 20230504

purtroppo quando aggiungo il comando CAST oppure il comando CONVERT si
ferma sempre con l'errore

Conversion failed when converting date and/or time from character
string

oppure

The conversion of a nvarchar data type to a datetime data type resulted
in an out-of-range value


Ho controllato riga per riga, NON ci sono errori di battitura, tipo
31.06.23 oppure week 55

le date che genero sono tutte (apparentemente) perfettamente valide

cosa posso controllare ancora? o un comando alternativo che me le
trasforma in date/date?

Grazie

--
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

Ammammata

unread,
Jun 14, 2023, 11:11:34 AM6/14/23
to
Ammammata explained on 12/06/2023 :
> ho un campo testo dove l'utente inserisce una data tipo "gg.mm.aa" oppure una
> settimana "week XX" (senza virgolette)

dopo il primo controllo sulla bontà e validità dei dati, mentre
scrivevo il codice, qualcuno in azienda ha pensato bene di inserire
altri dati nel sistema usando un formato non previsto dal codice
stesso... con conseguente generazione di un errore "inspiegabile" :)

ora il passo successivo è trovare un modo per escludere automaticamente
eventuali nuovi pasticci degli utenti o, meglio ancora, intercettare
l'errore generando un risultato palesemente fuori range, p.e.
31/12/1999

tutto questo usando SQL che è il solo linguaggio che ho a disposizione
per manipolarli

Giorgio Rancati

unread,
Jun 15, 2023, 9:13:53 AM6/15/23
to
non hai specificato a quale db ti riferisci, le funzioni CAST e CONVERT fanno presupporre a Microsoft Sql Server quindi al linguaggio T-Sql.
se è così potresti fare:

select Iif(isdate(parsename(Prod_Date,1)+Parsename(Prod_Date,2)+Parsename(Prod_Date,3))=1,Convert(Datetime,Prod_Date,4),'19991231') as Data
from schema.NomeTabella

la conversione delle settimane ISOWEEK in data richiese più lavoro, io farei evitare questo tipo di input.

Ciao
Giorgio Rancati

Ammammata

unread,
Jun 15, 2023, 11:09:54 AM6/15/23
to
Giorgio Rancati was thinking very hard :
> non hai specificato a quale db ti riferisci, le funzioni CAST e CONVERT fanno
> presupporre a Microsoft Sql Server quindi al linguaggio T-Sql.
> se è così potresti fare:
>
> select
> Iif(isdate(parsename(Prod_Date,1)+Parsename(Prod_Date,2)+Parsename(Prod_Date,3))=1,Convert(Datetime,Prod_Date,4),'19991231')
> as Data
> from schema.NomeTabella
>
> la conversione delle settimane ISOWEEK in data richiese più lavoro, io farei
> evitare questo tipo di input.

grazie Giorgio, domani ci butto un occhio, nel frattempo ho segnalato
alle operatrici l'inghippo e provvederanno a mettere dati coerenti
0 new messages