MS SQL Server:存储mm-dd--year hh-mm-ss am / pm会破坏datetime的时间

时间:2018-11-08 11:22:39

标签: sql sql-server tsql sql-server-2016

我通过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"将其合并到表中。

1 个答案:

答案 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);