2017-04-21 143 views
0

第一篇文章/問題在這裏。我試圖將一個nchar轉換爲datetime。我查找的例子都顯示從24轉換爲12小時,或者只是處理時間而不是轉換的全天。我不是SQL本地人,我仍然在學習基礎知識,所以任何幫助表示讚賞。SQL Server 2012:將12Hr AM/PM nchar轉換爲24Hr日期時間格式

我有一個這種格式的表,我已經從批量插入的.txt文件中讀取。

報警NCHAR文本

AlarmTime也是我從文本文件中讀取的日期NCHAR

Alarm | AlarmTime 
    1  |  7/6/2016 10:10:42 AM 
    2  |  7/10/2016 6:41:23 PM 
    3  |  8/4/2016 4:35:53 PM 

我想把它變成日期時間格式,而不是存儲爲nchar。 每當我嘗試轉換,我得到一個錯誤: 轉換日期和/或時間從字符串轉換失敗。

我正在尋找的是這只是存儲爲日期時間的結果是:

Alarm | AlarmTime 
     1  |  7/6/2016 10:10:42 
     2  |  7/10/2016 18:41:23 
     3  |  8/4/2016 16:35:53 

我也考慮在分離使用的分隔符單獨列上的日期和時間,然後把他們兩個一起回來以後。或者使用PM添加時間,然後將柱轉換爲日期時間。但是這兩個看起來都很麻煩,而且我發現有一件事很容易讓我錯過了完成這件事。

提前致謝!

回答

0

既然你是在2012年,我會建議你使用Try_Convert()。這將捕獲任何轉換錯誤。 (假設你的數據串爲m/d/Y)

爲了識別虛假記載,嘗試:

Select * from YourTable where Try_Convert(datetime,AlarmTime) is null 

示例代碼重新格式化您的數據

Declare @YourTable table (Alarm int,AlarmTime nvarchar(50)) 
Insert Into @YourTable values 
( 1,'7/6/2016 10:10:42 AM'), 
( 2,'7/10/2016 6:41:23 PM'), 
( 3,'8/4/2016 4:35:53 PM') 

Select A.* 
     ,ReFormated = format(try_convert(datetime,AlarmTime),'M/d/yyyy HH:mm:ss') 
     ,AsDateTime = try_convert(datetime,AlarmTime) 
From @YourTable A 

返回

Alarm AlarmTime    ReFormated   AsDateTime 
1  7/6/2016 10:10:42 AM 7/6/2016 10:10:42 2016-07-06 10:10:42.000 
2  7/10/2016 6:41:23 PM 7/10/2016 18:41:23 2016-07-10 18:41:23.000 
3  8/4/2016 4:35:53 PM  8/4/2016 16:35:53 2016-08-04 16:35:53.000 
+0

我還沒有聽說過try_conve RT。但是我跑了並且沒有錯誤地完成了,但是柱子仍然是空的。以下並運行您的示例代碼,一切正常運行。所以我認爲我的問題可能與我如何閱讀並將我的日期存儲在colum中。我會嘗試刪除任何剩餘的空間,看看是否有幫助。謝謝! – Spex1848

+0

@ Spex1848對它有幫助。我懷疑一些虛假數據。存儲日期時間總是危險的,因爲太多東西都可能出錯。 –

+0

@ Spex1848只是好奇當你運行Select * from YourTable其中Try_Convert(datetime,AlarmTime)爲null有多少條記錄返回?全部或只是少數? –

相關問題