SQL Server 2012:将12Hr AM / PM nchar转换为24Hr DateTime格式

时间:2017-04-21 15:24:36

标签: sql sql-server datetime sql-server-2012 type-conversion

这里的第一篇帖子/问题。我试图将nchar转换为datetime。我查找的所有示例都显示从24开始转换为12小时或仅处理时间而不是转换的完整日期。我不是SQL的本地人,而且我还在学习基础知识,所以任何帮助都会受到赞赏。

我有一个这种格式的表格,我已经从.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添加时间然后将colum转换为datetime。但是那些看起来都很麻烦,而且我觉得有一些简单的事情让我无法实现这一目标。

提前致谢!

1 个答案:

答案 0 :(得分: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