这里的第一篇帖子/问题。我试图将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。但是那些看起来都很麻烦,而且我觉得有一些简单的事情让我无法实现这一目标。
提前致谢!
答案 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