0

我有一个试图转换的 MS SQL 脚本

SET @FRecepcion = CONVERT(
          VARCHAR(30),CAST(@FechaRecepcion AS DATETIME),107
      )+ ' ' +
      CONVERT(
          VARCHAR(30),CAST(@FechaRecepcion AS DATETIME),108
      )
 IF (@FRecepcion = NULL)
 BEGIN
    SET @FRecepcion = ''
 END

当@FechaRecepcion 以预期的格式到达时,Aug 30, 2013 20:10:44转换工作。

但是当在其他计算机上测试这个脚本时,@FechaRecepcion 像这样到达 2013-08-30 20:10:44.000并且转换失败

如何编写可以处理这两种情况的 SQL 逻辑?或者解决这个问题的最佳方法是什么?

4

1 回答 1

1

在我将示例日期更新为2013-08-30 24:12:00.0002013-08-30 00:12:00.000提供的查询后,这对我有用。我在SQLFiddle上进行了验证。 24不是 DATETIME 的有效小时。它可能应该是00(并且可能是日期的一天部分增加 1)。

您需要找出为什么某些计算机会返回 24 小时而不是有效小时。根据以这种方式设置小时部分的原因,您可能会解析输入字符串,然后根据需要更新日期。

预期日期格式示例(2013 年 8 月 30 日 20:10:44):

SET @FechaRecepcion = 'Aug 30, 2013 20:10:44'  -- setup test data

SET @FRecepcion = CONVERT(
          VARCHAR(30),CAST(@FechaRecepcion AS DATETIME),107
      )+ ' ' +
      CONVERT(
          VARCHAR(30),CAST(@FechaRecepcion AS DATETIME),108
      )

具有意外日期格式的示例(2013-08-30 20:10:44.000),但使用相同的脚本来解析日期值:

SET @FechaRecepcion = '2013-08-30 20:10:44.000'  -- setup test data

SET @FRecepcion = CONVERT(
          VARCHAR(30),CAST(@FechaRecepcion AS DATETIME),107
      )+ ' ' +
      CONVERT(
          VARCHAR(30),CAST(@FechaRecepcion AS DATETIME),108
      )

编辑:更新示例查询以匹配原始问题中提供的示例。

于 2013-08-30T18:25:49.490 回答