插入SQL Server DB语句日期转换

时间:2018-07-05 13:10:15

标签: sql sql-server

我有此插入语句失败,抛出此错误:

  

第242条消息,级别3,状态3,第1行
  从varchar数据类型到datetime数据类型的转换导致值超出范围。该声明已终止。

这是插入语句:

INSERT INTO JOBR_GENERIC (ID, NUM_ATTR1, STR_ATTR1, TYPE, PLANT_ID,
                          MATERIAL_NUMBER, ORDERNO, LOTNO, QTY, DATE_ATTR1, 
                          STR_ATTR2, NUM_ATTR2, NUM_ATTR3, NUM_ATTR4, 
                          STR_ATTR3, NUM_ATTR5, NUM_ATTR6, NUM_ATTR7, 
                          NUM_ATTR9, NUM_ATTR10, NUM_ATTR11, DATE_ATTR2, 
                          DATE_ATTR3, DATE_ATTR4, NUM_ATTR12, NUM_ATTR13, STR_ATTR4, JOBR_TS) 
VALUES (153322, 401129, '901', 'A', 'A85', 
        '8ALD160', '', '6666666A', 8, CONVERT(DATETIME, '24/06/2017 00:00:00', 120),  
        'Test', 1, 9, 1, 
        '', 36, 99999999, 0, 
        109, 0, 0, CONVERT(DATETIME, '15/06/2018 16:08:26:397', 120), 
        CONVERT (DATETIME, '15/06/2018 16:08:26:397', 120), CONVERT(DATETIME, '', 120), 0, 0, 
        'A85', CONVERT(DATETIME, '2018-07-05 12:31:34', 120))

3 个答案:

答案 0 :(得分:2)

您的代码CONVERT(DATETIME, '15/06/2018 16:08:26:397', 120)是错误的(与其他大多数convert语句一样)。

120告诉SQL期望日期格式为yyyy-mm-dd hh:mi:ss。检查https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017以获取格式列表。

确保您的文本格式与您告诉服务器的期望匹配。对于上面的示例,103(匹配dd/mm/yyyy)将为您工作:

CONVERT(DATETIME, '15/06/2018 16:08:26:397', 120)

我还建议在整个查询中使用一致的日期格式,而不是像现在这样混合和匹配。一致的方法将使维护代码和发现错误变得更加容易。

答案 1 :(得分:1)

(1)您不需要进行转换。只需使用适当类型的字符串即可。

(2)将空字符串转换为日期/时间没有意义。只需使用NULL或将该列排除在insert之外。所以:

VALUES (153322,  401129, '901', 'A', 'A85', '8ALD160', '', '6666666A', 8,
        '2017-06-24 00:00:00', 'Test', 1, 9, 1, '', 36, 99999999,  
        0, 109, 0, 0, '2018-06-15 16:08:26:397',
        '2018-06-15 16:08:26:397', NULL, 0, 0, 'A85',
        '2018-07-05 12:31:34'
       )

答案 2 :(得分:0)

您尝试使用的格式是ODBC YYYY-MM-DD格式,但是,您有一个日期参数,格式为DD / MM / YYYY。这是行不通的。