2014-07-04 137 views
1

我有一個varchar這是未來通過爲以下格式:yyyy-dd-MM hh:mm:ssSQL自定義DateTime格式爲datetime

我需要能夠將其轉換成一個有效的datetime,這將是最好的方法是什麼?

編輯例如:

DECLARE @d varchar = '2014-17-01 12:00:00' 

SELECT CONVERT(DATETIME, @d, 103); 

回報

Msg 241, Level 16, State 1, Line 3 
Conversion failed when converting date and/or time from character string. 
+0

對不起,MSSQL(SQL Server 2012中) – TheGeekZn

+0

是否有可能有它通過發送一個某種形式的日期數據類型的,即'DATETIME','DATETIME2'等呢? –

+0

@a_horse_with_no_name瘋狂的谷歌搜索不會說它確實 – TheGeekZn

回答

2

通過CONVERT

SELECT CONVERT(DATETIME, '2014-31-01 17:00:00', 103 /* British */); 

(No column name) 
2014-01-31 17:00:00.000 
+0

'DECLARE @d varchar ='2014-17-01 12:00:00' SELECT CONVERT(DATETIME,@ d,103);'獲取轉換錯誤 – TheGeekZn

+0

因爲'DECLARE @d varchar ='2014-17- 01 12:00:00''是「'2」(無大小)你需要聲明@d varchar(19)' –

+0

新手的錯誤 - 謝謝! – TheGeekZn

0

編輯添加SET DATEFORMAT。這解決了我的錯誤,並確保一切進入正確的桶。

SET DATEFORMAT ydm 

DECLARE @d VARCHAR(20) = '2014-17-01 12:00:00'; 
DECLARE @targetDate DATETIME = GETDATE(); -- Control Date 
DECLARE @passedDate DATETIME = CAST(@d AS DATETIME); 

SELECT @targetDate, @passedDate; 
+1

它可能「有效」,但取決於DATEFORMAT設置的有效性,可能會生成7月4日或4月7日的日期時間。嘗試兩次運行查詢 - 一次在'set dateformat mdy'後面,一次在'set dateformat dmy'後面並比較結果。 –

+0

更新了答案,謝謝你的提醒。 – MystikSpiral

0

可以使用convert爲:

DECLARE @TodayDate日期時間 SET @TodayDate = GETDATE() SELECT CONVERT(VARCHAR,@TodayDate,110)AS TodayDate

輸出:

07-04-2014

希望它有幫助!

0

嘗試交換日期和月份,然後PARSE將新字符串轉換爲datetime。

DECLARE @d varchar(50) = '2014-17-01 12:00:00' 

DECLARE @year varchar(10) = SUBSTRING(@d,1,4) 
DECLARE @day varchar(10) = SUBSTRING(@d,6,2) 
DECLARE @month varchar(10) = SUBSTRING(@d,9,2) 
DECLARE @time varchar(10) = SUBSTRING(@d,12,8) 

DECLARE @new_d varchar(50) = @year+'-'[email protected]+'-'[email protected]+' '[email protected] 

SELECT PARSE(@new_d AS datetime USING 'en-US') as Result