2012-04-20 6 views
37

Mam ten format daty: 2011-09-28 18:01:00 (w varchar), i chcę przekonwertować go na datetime zmieniając na ten format 28-09-2011 18:01 : 00. Jak mogę to zrobić?SQL Server Konwersja Varchar na Datetime

+0

który RDBMS jest stosowany? ponieważ funkcjonalność daty może się różnić – Hajo

+1

@Hajo: Myślę, że tytuł dość wyjaśnia to – Quassnoi

+0

@Quassnoi może to być serwer Microsoft SQL, ale nie jestem w 100% pewny, wiele rdbms może być serwerem sql;) – Hajo

Odpowiedz

62
SELECT CONVERT(Datetime, '2011-09-28 18:01:00', 120) -- to convert it to Datetime 

SELECT CONVERT(VARCHAR(30), @date ,105) -- italian format [28-09-2011 18:01:00] 
+ ' ' + SELECT CONVERT(VARCHAR(30), @date ,108) -- full date [with time/minutes/sec] 
+0

Pamiętaj tylko, że zmienna datetime nie ma formatu. Musisz przekonwertować go na varchar, jeśli chcesz, aby wyświetlał się w określonym formacie. – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+1

datetime nie ma formatu, ale trzeba określić, jak odtworzyć tekst (gdzie id dzień/miesiąc ...) – Zyku

10

Ci się to

DECLARE @date DATETIME 
SET @date = '2011-09-28 18:01:00' 
select convert(varchar, @date,105) + ' ' + convert(varchar, @date,108) 
+0

'Chcę przekonwertować go na datetime, zmieniając ten format 28-09-2011 18: 01: 00. - Gdzie używasz nowego formatu? – MatBailie

+0

Działa to, ale nie ma potrzeby czterech konwertytów. Popatrz na odpowiedź Diego SELECT CONVERT (VARCHAR (30), GETDATE(), 105) – daniloquio

+0

Tak, odpowiedź Diego musi zmienić varchar (10) na (30). Wtedy to zadziała. – daniloquio

3

można zrobić to w ten sposób, ale pozostawia go jako varchar

declare @s varchar(50) 

set @s = '2011-09-28 18:01:00' 

select convert(varchar, cast(@s as datetime), 105) + RIGHT(@s, 9) 

lub

select convert(varchar(20), @s, 105) 
+0

To pomija czas – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

@zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz masz rację, naprawiono. – Taryn

9

this strona pokazuje kilka opcji formatowania.

Przykład:

SELECT CONVERT(VARCHAR(10), GETDATE(), 105) 
+5

Poza tym, że 105 nie zawiera części czasowej. OP zaczyna się od łańcucha, a nie datetime. To * jest * pomocne, ale nie to, co uważam za kompletną odpowiedź. – MatBailie

+2

dzięki za komentarze chłopaki. Właśnie chciałem wskazać mu właściwy kierunek, dlatego napisałem "przykład" – Diego

3

Jak już zostało powiedziane, datetime ma format/reprezentacyjny ciąg formatu.

Możesz zmienić wyjście łańcuchowe z pewnym formatowaniem.

Aby przekonwertować ciąg datetime:

declare @date nvarchar(25) 
set @date = '2011-09-28 18:01:00' 

-- To datetime datatype 
SELECT CONVERT(datetime, @date) 

Daje:

----------------------- 
2011-09-28 18:01:00.000 

(1 row(s) affected) 

Aby przekonwertować na ciąg chcesz:

-- To VARCHAR of your desired format 
SELECT CONVERT(VARCHAR(10), CONVERT(datetime, @date), 105) +' '+ CONVERT(VARCHAR(8), CONVERT(datetime, @date), 108) 

Daje:

------------------- 
28-09-2011 18:01:00 

(1 row(s) affected) 
3
SELECT CONVERT(VARCHAR(10), GETDATE(), 105) + ' ' + CONVERT(VARCHAR(10), GETDATE(), 108) 
5

Można mieć wszystkie różne style datetime conversion:

http://www.w3schools.com/sql/func_convert.asp

ten ma zakres wartości: -

CONVERT(data_type(length),expression,style) 

Dla wartości stylu,
Wybierz każdego, kogo potrzebujesz Potrzebowałem 106.

Z całą istniejącą moją odpowiedzią ma specjalny link do strony pomocy, dzięki któremu nawet początkujący mogą się do tego odnieść. W ten sposób bardziej użyteczny

+0

Dzięki @Dharmesh – baymax

+0

Twoja odpowiedź wydaje się po prostu powtarzać informacje podane w istniejącej odpowiedzi. Z tego powodu usunąłem twoją odpowiedź. Jeśli chcesz dodać * nowe * informacje do swojej odpowiedzi, edytuj post, a następnie oznacz flagę, aby anulować usunięcie. – Matt

1

This web ma kilka dobrych przykładów, aby zamienić dowolny varchar do daty lub datetime

3

spróbować poniżej

select Convert(Varchar(50),yourcolumn,103) as Converted_Date from yourtbl