我通过API接收了日期时间格式的json,例如: 2018年12月4日上午11:10:00(所以就像:mm-dd--year hh-mm-ss am / pm) 我在MS SQL Server 2016中的表中添加了一个datetime行,并导入了数据。我希望日期时间显示为2018-12-04 11:10:00.000,但在导入过程中,SQL Server会杀死时间部分条目。因此仅存储2018-12-04 00:00:00.000我检查了Google和stackoverflow,但找到了原因。
有什么提示吗?
我将json信息存储在一个变量中,并通过@json/OPENJSON
导入数据,并通过tsql "merge"
将其合并到表中。
答案 0 :(得分:1)
使用的日期时间格式是一个软件包中所有 never-do-this 的累加...这是特定于语言,特定于文化和非标准的。
但是-幸运的家伙-您非常接近SQL Server中的现有标准格式。了解有关CAST()
and CONVERT()
and the third parameter.的信息。
尝试一下:
SET LANGUAGE ENGLISH;
DECLARE @YourDateTimeString VARCHAR(100)='December 4 2018, 11:10:00 AM';
SELECT CONVERT(DATETIME,REPLACE(@YourDateTimeString,',',''),109);
请务必使用会显示“十二月”的语言。在我的文化(德语)中,这是“ Dezember”,脚本会失败...
为了进入109格式,似乎替换逗号就足够了。
如果有机会更改输入,请尝试说服发送方使用标准格式,最好是ISO8601(yyyyMMddTHH:mm:ss
)。
在测试时,我在错误的地方输入了逗号。使用您给定的字符串,即使没有任何替换也可以正常工作:
SET LANGUAGE ENGLISH;
DECLARE @YourDateTimeString VARCHAR(100)='December 4, 2018 11:10:00 AM';
SELECT CONVERT(DATETIME,@YourDateTimeString,109);