|
Îåêßíçóå áðü ôï ìÝëïò axaros. Τελευταία δημοσίευση από το μέλος axaros στις 02-08-2005, 21:14. Υπάρχουν 20 απαντήσεις.
-
23-05-2005, 12:44
|
-
23-05-2005, 13:00
|
|
Re: Formating πεδία Datetime
Το format string είναι το σωστό. Μήπως εννοείς σε ποιό property πρέπει να το βάλεις? Το DateTimePicker έχει δύο properties για το format. Για να βάλεις το δικό σου, custom format βάζει το Format = Custom και το CustomFormat αυτό που έγραψες. Όλα όσα θες για τα controls και τα format θα τα βρεις πολυ πιο εύκολα αν κοιτάξεις πρώτα στο MSDN. Υπάρχουν τόσο οι περιγραφές για τα format strings όσο και για τα DateTimePicker και MonthCalendar
Παναγιώτης Καναβός, Freelancer Twitter: http://www.twitter.com/pkanavos
|
|
-
23-05-2005, 13:16
|
-
axaros
-
-

-
Μέλος από τις 17-05-2005
-
Να μην σας νοιάζει αδιάκριτοι!!
-
Δημοσιεύσεις 842
-
-
|
Re: Formating πεδία Datetime
Γεια σου συνονόματε, θα ήθελα να γράψω ένα User defined function στον SQL server που να γυρνάει προφανώς string (nvarchar) στο παραπάνω format ...
Πάνος Αβραμίδης
|
|
-
23-05-2005, 13:37
|
-
axaros
-
-

-
Μέλος από τις 17-05-2005
-
Να μην σας νοιάζει αδιάκριτοι!!
-
Δημοσιεύσεις 842
-
-
|
Re: Formating πεδία Datetime
Ιδού και το function που δεν μου παίζει :
CREATE FUNCTION [dbo].[fnDateFormating] ( @Date datetime) RETURNS nvarchar(50) AS BEGIN DECLARE @display nvarchar(50) IF @Date = Null BEGIN SET @display = 'Τώρα' END ELSE BEGIN --SET @display = Convert(varchar(50),@Date) SET @display = CAST(DATEPART(mm, @Date) AS nvarchar) + '/' + CAST(DATEPART(dd, @Date) AS nvarchar) + '/' + CAST(DATEPART(yyyy, @Date) AS nvarchar) + ' ' + CAST(DATEPART(HH, @Date) AS nvarchar) + ':' + CAST(DATEPART(mm, @Date) AS nvarchar) + ':' + CAST(DATEPART(ss, @Date) AS nvarchar) END RETURN @display END
Πάνος Αβραμίδης
|
|
-
23-05-2005, 13:39
|
|
Re: Formating πεδία Datetime
Καλά να πάθω που διαβάζω τα posts από το Google.
PATRICK! ΠΟΤΕ ΕΠΙΤΕΛΟΥΣ ΘΑ ΜΠΕΙ ΑΥΤΟ ΤΟ LATEST POSTS?
Λοιπόν, αυτό που ζητάς είναι μυστηριωδώς δύσκολο. Η T-SQL έχει ένα function, το CONVERT που μετατρέπει τιμές από τον ένα τύπο στον άλλο. Μπορείς να το χρησιμοποιήσεις αλλά υποστηρίζει μόνο συγκεκριμμένα formats. Αν γράψεις select convert(nvarchar(30),getdate(),120) θα σου γυρίσει 2005-05-23 13:35:42
Η άλλη λύση είναι να φτιάξεις ένα function που θα χρησιμοποιεί την datepart για να πάρει κομμάτι-κομμάτι την ημερομηνία και να κολλήσει τα κομμάτια όπως τα θες. Πολύ σπαστικό και λέει να το κάνεις μόνο αν είναι ανάγκη.
Είναι χίλιες φορές καλύτερο να κάνεις την μετατροπή στον client. Είτε μιλάμε για Windows Forms, Web Forms, VB6, Reporting Services, Crystal Reports, οποιοδήποτε client μπορεί να κάνει καλύτερα τη μετατροπή.
Παναγιώτης Καναβός, Freelancer Twitter: http://www.twitter.com/pkanavos
|
|
-
23-05-2005, 13:51
|
|
Re: Formating πεδία Datetime
Χίχιχι, δεν είμαι μόνο εγώ αφηρημένος! Ανακούφιση!
Αν προσέξεις το cast, έχεις βάλει πρώτο τον μήνα και τον επαναλαμβάνεις αντί για τα λεπτά! Το σωστό cast είναι:
SET @display = CAST(DATEPART(dd, @Date) AS nvarchar) + '/' + CAST(DATEPART(mm, @Date) AS nvarchar) + '/' + CAST(DATEPART(yyyy, @Date) AS nvarchar) + ' ' + CAST(DATEPART(HH, @Date) AS nvarchar) + ':' + CAST(DATEPART(mi, @Date) AS nvarchar) + ':' + CAST(DATEPART(ss, @Date) AS nvarchar)
Τώρα αν καταλάβω και γιατί δεν βάζει μηδενικά στους μονοψήφιους αριθμούς ...
Όπως έλεγα, καλύτερα να κάνεις τη μετατροπή στον client.
Παναγιώτης Καναβός, Freelancer Twitter: http://www.twitter.com/pkanavos
|
|
-
23-05-2005, 14:33
|
-
axaros
-
-

-
Μέλος από τις 17-05-2005
-
Να μην σας νοιάζει αδιάκριτοι!!
-
Δημοσιεύσεις 842
-
-
|
Re: Formating πεδία Datetime
Παναγιώτη, Έχεις απόλυτο δίκιο ... Είδες τι παθαίνω από το πολύ googling ....
Αυτό το %#$ (τιμημένο) μονοψήφιο με έχει γονατίσει κι εμένα ...
Θα μπορούσα να το κάνω στον όποιο client αλλά θέλω να εμφανίζω το string 'Τώρα' υπό το Null condition ...
Πάνος Αβραμίδης
|
|
-
23-05-2005, 14:51
|
-
axaros
-
-

-
Μέλος από τις 17-05-2005
-
Να μην σας νοιάζει αδιάκριτοι!!
-
Δημοσιεύσεις 842
-
-
|
Re: Formating πεδία Datetime
ΕΥΡΗΚΑ !!!!!!!!!!!!!!!!!!!
Πάνο θέλω τη γνώμη σου !!!!
SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO
CREATE FUNCTION [dbo].[FormatDate] ( @date datetime, @format varchar(100) = '' ) RETURNS varchar(256) AS BEGIN /* Valid @format arguments nothing - returns the date as varchar or a blank string if null y or yy - returns the last two digits of the year yyyy - returns the four digits of the year m - returns the month mm - returns the month zero filled forcing two digits d - returns the day dd - returns the day zero filled forcing two digits h - returns the hour hh - returns the hour zero filled forcing two digits n - returns the minute nn - returns the minute zero filled forcing two digits s - returns the second ss - returns the second zero filled forcing two digits l - returns millisecond else - returns itself */ declare @fmtxt varchar(100) declare @frmtemp varchar(4) declare @fmchar varchar(1) declare @i int --Return blank if date is null if (@date = '' or @date is null) return '' --Return date as string if format is blank if (@format is null or @format='') return convert(varchar, @date) set @fmtxt = '' set @I = 1 set @format = lower(@format) --in case the server is set to case sensitvity --loop through each format character while (@i < len(@format) + 1) begin set @fmchar = substring(@format, @i, 1) if (@fmchar = 'y') begin --see if next character is the same if (substring(@format, @i+3, 1) = @fmchar) begin set @fmtxt = @fmtxt + convert(varchar, datepart(yyyy, @date)) set @i = @i + 3 end else begin set @fmtxt = @fmtxt + right(convert(varchar, datepart(yyyy, @date)), 2) if (substring(@format, @i+1, 1) = @fmchar) set @i = @i + 1 end end else if (@fmchar = 'm') begin --see if next character is the same if (substring(@format, @i+1, 1) = @fmchar) begin set @frmtemp = convert(varchar, datepart(m, @date)) if (len(@frmtemp) = 1) set @frmtemp = '0' + @frmtemp set @fmtxt = @fmtxt + @frmtemp set @i = @i + 1 end else set @fmtxt = @fmtxt + convert(varchar, datepart(m, @date)) end else if (@fmchar = 'd') begin --see if next character is the same if (substring(@format, @i+1, 1) = @fmchar) begin set @frmtemp = convert(varchar, datepart(d, @date)) if (len(@frmtemp) = 1) set @frmtemp = '0' + @frmtemp set @fmtxt = @fmtxt + @frmtemp set @i = @i + 1 end else set @fmtxt = @fmtxt + convert(varchar, datepart(d, @date)) end else if (@fmchar = 'h') begin --see if next character is the same if (substring(@format, @i+1, 1) = @fmchar) begin set @frmtemp = convert(varchar, datepart(hh, @date)) if (len(@frmtemp) = 1) set @frmtemp = '0' + @frmtemp set @fmtxt = @fmtxt + @frmtemp set @i = @i + 1 end else set @fmtxt = @fmtxt + convert(varchar, datepart(hh, @date)) end else if (@fmchar = 's') begin --see if next character is the same if (substring(@format, @i+1, 1) = @fmchar) begin set @frmtemp = convert(varchar, datepart(s, @date)) if (len(@frmtemp) = 1) set @frmtemp = '0' + @frmtemp set @fmtxt = @fmtxt + @frmtemp set @i = @i + 1 end else set @fmtxt = @fmtxt + convert(varchar, datepart(s, @date)) end else if (@fmchar = 'n') begin --see if next character is the same if (substring(@format, @i+1, 1) = @fmchar) begin set @frmtemp = convert(varchar, datepart(n, @date)) if (len(@frmtemp) = 1) set @frmtemp = '0' + @frmtemp set @fmtxt = @fmtxt + @frmtemp set @i = @i + 1 end else set @fmtxt = @fmtxt + convert(varchar, datepart(n, @date)) end else if(@fmchar = 'l') set @fmtxt = @fmtxt + convert(varchar, datepart(ms, @date)) else set @fmtxt = @fmtxt + @fmchar set @i = @i + 1 end return @fmtxt END GO GRANT EXEC on dbo.FormatDate to PUBLIC GO
SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
Πάνος Αβραμίδης
|
|
-
23-05-2005, 15:25
|
|
Re: Formating πεδία Datetime
excuse moi, αλλά δεν είναι λίγο θεοπάλαβο να υπάρχει στη βάση όλο αυτό το γαϊδούρι; Τις τιμές σου αν τις δείχνεις σε grid, μπορείς να ορίσεις τι θα δείχνει στη θέση του null από τα properties του datagrid column...
Χρήστος Γεωργακόπουλος
|
|
-
23-05-2005, 16:08
|
-
axaros
-
-

-
Μέλος από τις 17-05-2005
-
Να μην σας νοιάζει αδιάκριτοι!!
-
Δημοσιεύσεις 842
-
-
|
Re: Formating πεδία Datetime
Je te pardon mon ami ....
Το αν είναι θεοπάλαβο δεν το ξέρω, θα έχεις τους λόγους για να το λες ... Εγώ μιά εναλλακτική λύση ζητούσα για να μην κάνω formatting στον client ...
Πάνος Αβραμίδης
|
|
-
23-05-2005, 16:16
|
-
axaros
-
-

-
Μέλος από τις 17-05-2005
-
Να μην σας νοιάζει αδιάκριτοι!!
-
Δημοσιεύσεις 842
-
-
|
Re: Formating πεδία Datetime
To TheotrelloGaidouraki τι σου λέει :
CREATE FUNCTION ΤheotreloGaidouraki (@date as Datetime) RETURNS nvarchar(50) AS BEGIN Declare @Result nvarchar(50) Declare @Days nvarchar(2) Declare @Months nvarchar(2) Declare @Hours nvarchar(2) Declare @Minutes nvarchar(2) Declare @Seconds nvarchar(2) If @Date = Null Begin Set @Result = 'Τώρα' end Else Begin If Len(CAST(DATEPART(dd, @Date) AS nvarchar)) = 1 Begin Set @Days = '0' + CAST(DATEPART(dd, @Date) AS nvarchar) End Else Begin Set @Days = CAST(DATEPART(dd, @Date) AS nvarchar) End If Len(CAST(DATEPART(mm, @Date) AS nvarchar)) = 1 Begin Set @Months = '0' + CAST(DATEPART(mm, @Date) AS nvarchar) End Else Begin Set @Months = CAST(DATEPART(mm, @Date) AS nvarchar) End If Len(CAST(DATEPART(HH, @Date) AS nvarchar)) = 1 Begin Set @Hours = '0' + CAST(DATEPART(HH, @Date) AS nvarchar) End Else Begin Set @Hours = CAST(DATEPART(HH, @Date) AS nvarchar) End If Len(CAST(DATEPART(mi, @Date) AS nvarchar)) = 1 Begin Set @Minutes = '0' + CAST(DATEPART(mi, @Date) AS nvarchar) End Else Begin Set @Minutes = CAST(DATEPART(mi, @Date) AS nvarchar) End If Len(CAST(DATEPART(ss, @Date) AS nvarchar)) = 1 Begin Set @Seconds = '0' + CAST(DATEPART(ss, @Date) AS nvarchar) End Else Begin Set @Seconds = CAST(DATEPART(ss, @Date) AS nvarchar) End Set @Result = @Days +'/' + @Months + '/' + CAST(DATEPART(yyyy, @Date) AS nvarchar) + ' ' + @Hours + ':' + @Minutes + ':' + @Seconds End Return @Result END
Πάνος Αβραμίδης
|
|
-
23-05-2005, 19:38
|
|
Re: Formating πεδία Datetime
Νομίζω γίνεστε τραγικοί.. το CONVERT κάνει μια χαρά την δουλειά και δεν υπάρχει ανάγκη για ΟΤΙ παραπέρα. Πόσο μάλλον όταν υποστηρίζει σχεδόν κάθε επίσημο format ημερομηνίας που υπάρχει επάνω στον πλανήτη!
Μέσα στο Books on Line και στην σελίδα του "CAST and CONVERT" υπάρχει ο αναλυτικός πίνακας με τις ημερομηνίες και τους κωδικούς που δέχεται το CONVERT για να γυρίσει το string που απαιτείται κάθε φορά.
Σκοπός είναι να μένει κάτι απλό και να μπορεί να επαναχρησιμοποιηθεί εύκολα. Δεν είναι ανάγκη να ξαναγράφουμε ότι υπάρχει από την αρχή, για να το κάνουμε optimize στις ανάγκες μας. Τότε δεν θα γράφουμε προγράμματα, θα κάνουμε optimize κώδικα.
Για την ιστορία πλέον:dd/mm/yy : Convert(varchar(32), DateColumn, 3)dd/mm/yyyy : Convert(varchar(32), DateColumn, 103)hh:mm:ss : Convert(varchar(32), DateColumn, 108)Και όταν δεν έχει κάτι που χρειαζόμαστε το φτιάχουμε με τα παραπάνω: dd/mm/yy hh:mm:ss : Convert(varchar(32), DateColumn, 3) + ' ' + Convert(varchar(32), DateColumn, 108)
George J.
|
|
-
23-05-2005, 21:29
|
|
Re: Formating πεδία Datetime
Monsieur Capnias, σας βγάζω το καπέλο! Λύση απλή και αποτελεσματική!
Η αλήθεια είναι ότι σκεφτόμουνα ότι δεν μπορεί κανείς να φτιάξει οποιοδήποτε format με απλό τρόπο στον SQL Server. Ευτυχώς, αυτή η περίπτωση δουλεύει. Άλλες όμως μπορεί να μην δουλεύουν.
Όπως και να έχει, αν θέλει κανείς format, πρέπει να το κάνει στον client. Και από φιλοσοφικής άποψης επίσης. Διαφορετικά θα πρέπει να πειράζει την DB κάθε φορά που θέλει να αλλάξει το format.
Παναγιώτης Καναβός, Freelancer Twitter: http://www.twitter.com/pkanavos
|
|
-
24-05-2005, 08:15
|
-
axaros
-
-

-
Μέλος από τις 17-05-2005
-
Να μην σας νοιάζει αδιάκριτοι!!
-
Δημοσιεύσεις 842
-
-
|
Re: Formating πεδία Datetime
Thank you δάσκαλε !!!
Πάνος Αβραμίδης
|
|
-
27-05-2005, 07:27
|
-
γιωργος μπακογιαννης
-
-

-
Μέλος από τις 23-04-2005
-
Πάτρα - Αθήνα
-
Δημοσιεύσεις 334
-
-
|
Re: Formating πεδία Datetime
ΚΑΙ ΜΙΑ ΠΑΡΑΛΛΑΓΗ:
CREATE FUNCTION fxFormatDate( @value as datetime, @forma as smallint ) RETURNS varchar(20) AS BEGIN Declare @dd as varchar(2) Declare @mm as varchar(2) Declare @yy as varchar(2) Declare @yyyy as varchar(4) Set @dd = dbo.fxPadL(datepart(day,@value),2,'0') Set @mm = dbo.fxPadL(datepart(month,@value),2,'0') Set @yy = Right(datepart(year,@value),2) Set @yyyy = dbo.fxPadL(datepart(year,@value),4,'0') IF @forma = 1 Return @dd + '/' + @mm + '/' + @yyyy IF @forma = 2 Return @dd + '/' + @mm + '/' + @yy IF @forma = 3 Return @dd + '/' + @mm IF @forma = 4 Return @dd + @mm + @yyyy IF @forma = 5 Return @dd + @mm + @yy IF @forma = 6 Return @dd + @mm IF @forma = 7 Return @yyyy + @mm + @dd IF @forma = 8 Return @yy + @mm + @dd IF @forma = 9 Return @mm + @dd RETURN '' END CREATE FUNCTION fxPadL( @str as varchar(255), @Length int, @chr as varchar(1)) RETURNS varchar(255) As Begin RETURN Replicate( @chr, @Length-Len(@str) ) + @str End
CREATE FUNCTION fxPadR( @str as varchar(255), @Length int, @chr as varchar(1)) RETURNS varchar(255) AS BEGIN RETURN @str + Replicate( @chr, @Length-Len(@str) ) END
while (!dead) learn();
|
|
Σελίδα 1 από 2 (21 εγγραφές)
1
|
|
|