我通过API接收到一个日期时间格式如下的json:2018年12月4日上午11:10:00(所以它就像:mm-dd-year hh-mm-ss-AM/pm(我在MS SQL Server 2016的表中添加了一个日期时间行,并导入了数据。我预计日期时间显示为2018-12-04 11:10:00.000,但在导入过程中,SQL Server会杀死时间部分条目。因此,只存储了2018-12-04 00:00:00.000。我查看了谷歌和stackoverflow,但找到了原因。
有什么建议吗?
编辑
我将json Infos存储在一个变量中,并通过@json/OPENJSON
导入数据,然后通过tsql"merge"
将其合并到表中。
使用的日期时间格式是所有的集合。永远不要在一个包中这样做。。。它是特定语言、特定文化和非标准的。
但是,幸运的是,您非常接近SQL Server中现有的标准格式。阅读CAST()
和CONVERT()
以及第三个参数。。
试试这个:
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);