Ordinare le date che sono di tipo Varchar

venerdì 18 agosto 2006 - 14.43

lucagtii Profilo | Junior Member

Ciao a tutti, volevo chiedere se qualcuno mi sa indicare cm potrei fare per ordinare delle date che sono castate a varchar.
Per es:
select cast(year(msgdatetime)as varchar) + '-' + cast(month(msgdatetime)as varchar) + '-' + cast(day(msgdatetime)as varchar)
from <tabella>
where cast(year(msgdatetime)as varchar) + '-' + cast(month(msgdatetime)as varchar) + '-' + cast(day(msgdatetime)as varchar) between cast(year(msgdatetime)as varchar) + '-' + cast(month(msgdatetime)as varchar) + '-' + cast(day(msgdatetime)as varchar) and cast(year(msgdatetime)as varchar) + '-' + cast(month(msgdatetime)as varchar) + '-' + cast(day(getdate())as varchar)
group by cast(year(msgdatetime)as varchar) + '-' + cast(month(msgdatetime)as varchar) + '-' + cast(day(msgdatetime)as varchar)
order by Date2export

Questa query dovrebbe tirarmi fuori tutti i giorni di un determinato mese fino al gg n.mo pari a oggi, quindi ad esempio dal 1/5/2006 al 18/05/2006. Il problema è che ad esempio il 2,3,4,5,6,7,8,9 non me li restituisce.

Spero di essere stato chiaro.
Ciao, grazie.

lbenaglia Profilo | Guru

>Per es:
>select cast(year(msgdatetime)as varchar) + '-' + cast(month(msgdatetime)as
>varchar) + '-' + cast(day(msgdatetime)as varchar)
>from <tabella>
>where cast(year(msgdatetime)as varchar) + '-' + cast(month(msgdatetime)as
>varchar) + '-' + cast(day(msgdatetime)as varchar) between cast(year(msgdatetime)as
>varchar) + '-' + cast(month(msgdatetime)as varchar) + '-' + cast(day(msgdatetime)as
>varchar) and cast(year(msgdatetime)as varchar) + '-' + cast(month(msgdatetime)as
>varchar) + '-' + cast(day(getdate())as varchar)
>group by cast(year(msgdatetime)as varchar) + '-' + cast(month(msgdatetime)as
>varchar) + '-' + cast(day(msgdatetime)as varchar)
>order by Date2export
>
>Questa query dovrebbe tirarmi fuori tutti i giorni di un determinato
>mese fino al gg n.mo pari a oggi, quindi ad esempio dal 1/5/2006
>al 18/05/2006. Il problema è che ad esempio il 2,3,4,5,6,7,8,9
>non me li restituisce.

Ciao lucagtii,

Vedendo le funzioni che utilizzi mi sembra di capire che stai lavorando con SQL Server, ma sinceramente non ho capito il significato di quella query.
Potresti cortesemente praparare un piccolo esempio con la struttura della tabella (CREATE TABLE), alcune righe di prova (INSERT INTO) ed il result set finale che vorresti ottenere?

>Spero di essere stato chiaro.
Mmmmm... direi che puoi fare meglio

>Ciao, grazie.
A te.

Ciao!

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

lucagtii Profilo | Junior Member

La cosa che mi serve è molto semplice, cioè vorrei capire come ordine dei numeri in ordine crescente se questi sono di tipo varchar.

Perhè se io ad esempio scrivo in 15 righe diverse da 1 a 15 e poi voglio ordinare in modo crescente il 2 ad esempio verrà dopo il 15....

1
10
11
12
13
14
15
2
3
4
5
6
7
8
9

Ciao Grazie.

lbenaglia Profilo | Guru

>La cosa che mi serve è molto semplice, cioè vorrei capire come
>ordine dei numeri in ordine crescente se questi sono di tipo
>varchar.
>
>Perhè se io ad esempio scrivo in 15 righe diverse da 1 a 15 e
>poi voglio ordinare in modo crescente il 2 ad esempio verrà dopo
>il 15....
>
>1
>10
>11
>12
>13
>14
>15
>2
>3
>4
>5
>6
>7
>8
>9

Che c'entrano i numeri con le date?!
Se sono numeri ricastali da stringa ad interi ed il gioco è fatto, diversamente posta l'esempio che ti ho chiesto.

>Ciao Grazie.
Prego.

Ciao!

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

lucagtii Profilo | Junior Member

>Che c'entrano i numeri con le date?!
>Se sono numeri ricastali da stringa ad interi ed il gioco è fatto,
>diversamente posta l'esempio che ti ho chiesto.
Dunque la tabella è formata da una colonna di tipo datetime.
Dentro ci sono n° righe suddivise per giorno.
Quello che mi servirebbe è estrarre in modo ordinato (per giorno intendo) la lista dei giorni di un determinato mese in ordine crescente.

Purtoppo dalla query che ho postato prima il risultato è una sequenza di giorni ordinate cm fossero delle stringhe:
2006-5-10
2006-5-11
2006-5-12
2006-5-13
2006-5-15
2006-5-16
2006-5-17
2006-5-18
2006-5-19
2006-5-2
2006-5-20
2006-5-22
2006-5-23
2006-5-24
2006-5-25
2006-5-26
2006-5-27
2006-5-29
2006-5-3

Ciao Grazie.

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

lbenaglia Profilo | Guru

>Dunque la tabella è formata da una colonna di tipo datetime.
>Dentro ci sono n° righe suddivise per giorno.
>Quello che mi servirebbe è estrarre in modo ordinato (per giorno
>intendo) la lista dei giorni di un determinato mese in ordine
>crescente.
E dove sta il problema? ORDER BY colonna datetime.

>Purtoppo dalla query che ho postato prima il risultato è una
>sequenza di giorni ordinate cm fossero delle stringhe:
La query di prima è un obrobrio
Mi spieghi cortesemente cosa vuoi in output? Una stringa nel formato YYYY-MM-DD?
Se le cose stanno così potresti utilizzare una query simile a questa:

USE tempdb; GO CREATE TABLE dbo.Dates( [Date] datetime NOT NULL ); GO SET NOCOUNT ON INSERT dbo.Dates VALUES('20060510'); INSERT dbo.Dates VALUES('20060511'); INSERT dbo.Dates VALUES('20060512'); INSERT dbo.Dates VALUES('20060513'); INSERT dbo.Dates VALUES('20060515'); INSERT dbo.Dates VALUES('20060516'); INSERT dbo.Dates VALUES('20060517'); INSERT dbo.Dates VALUES('20060518'); INSERT dbo.Dates VALUES('20060519'); INSERT dbo.Dates VALUES('20060502'); INSERT dbo.Dates VALUES('20060520'); INSERT dbo.Dates VALUES('20060522'); INSERT dbo.Dates VALUES('20060523'); INSERT dbo.Dates VALUES('20060524'); INSERT dbo.Dates VALUES('20060525'); INSERT dbo.Dates VALUES('20060526'); INSERT dbo.Dates VALUES('20060527'); INSERT dbo.Dates VALUES('20060529'); INSERT dbo.Dates VALUES('20060503'); SET NOCOUNT OFF GO SELECT CONVERT(CHAR(10), [Date], 120) AS FormattedDate FROM dbo.Dates ORDER BY [Date]; GO /* Output: FormattedDate ------------- 2006-05-02 2006-05-03 2006-05-10 2006-05-11 2006-05-12 2006-05-13 2006-05-15 2006-05-16 2006-05-17 2006-05-18 2006-05-19 2006-05-20 2006-05-22 2006-05-23 2006-05-24 2006-05-25 2006-05-26 2006-05-27 2006-05-29 (19 row(s) affected) */ DROP TABLE dbo.Dates;

Se il risultato che vuoi è differente posta un esempio completo come ho fatto io, altrimenti non ne veniamo più fuori, OK?

>Ciao Grazie.
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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