【发布时间】:2015-06-03 18:11:38
【问题描述】:
如果有人有想法,请寻求有关奇怪问题的帮助:
我有一个 SQL,该语句大部分时间都在 T-SQL 脚本中工作,但偶尔会崩溃。我已识别出发生崩溃的数据,但无法识别有效数据行之间的任何差异。
此代码的目标是将时间添加到已经存在的日期时间值,该值具有 00:00:00 作为第二个时间列的时间(如下所述)。我的目标是将两列合并为 YYYY-MM-DD HH:MM:SS 格式,但我必须先将它们转换为 char 以修剪掉原来的 00:00:00。
列
LogDate - 仅包含 DateTime 格式的日期 (YYYY-MM-DD HH:MM:SS)
LogTime - 包含动作的时间,是 varchar 格式 (HH:MM)
SQL 转换
SELECT CONVERT(DATETIME, CONVERT(CHAR(8), LogDate, 112) + ' ' + CONVERT(CHAR(8), LogTime, 108))
FROM TestTable
WHERE EventSerial = '100001'
但是,如果我将上述语句中的 EventSerial 更改为不同的行,例如“100002”,则该语句有效。
每一行的数据如下:
EventSerial 100001 的值: 记录日期:2015-04-02 00:00:00.000 记录时间:10:04
EventSerial 100002 的值: 记录日期:2015-04-02 00:00:00.000 记录时间:10:48
使用数据集 1 运行失败,使用数据集 2 运行会产生输出。此外,在没有最终日期时间转换的情况下运行代码,或者如果我手动运行带有字符串的代码,它可以工作(如下所述:)
SELECT CONVERT(CHAR(8), LogDate, 112) + ' ' + CONVERT(CHAR(8), LogTime, 108)
FROM TestTable
WHERE EventSerial = '100001'
SELECT CONVERT(DATETIME, '20150402 10:48')
SELECT CONVERT(DATETIME, '20150402 10:04')
任何建议,我确信我错过了一些愚蠢的东西(无论如何我可能花了很长时间解决这个问题。所需的输出将是 2015-04-02 10:04:00
【问题讨论】:
-
您的数据一定有问题。 I can't reproduce the error. 如果您使用正确的数据类型,这将避免。
-
完全同意,不幸的是,数据库数据类型和架构早在我来到这里之前就已经定义好了(很遗憾,无法更改)。感谢您尝试复制它,我很感激!
-
尝试更新有问题的行中的 LogTime 的值,也许那里有一个隐藏字符导致了所有这些问题。
标签: sql-server date datetime time sql-convert