我有一个关于将DATEADD()
函数用于标识为的列的问题CHAR (6)
该time_stamp
列包含131329
as之类的值hhmmss
。每当我尝试创建一个新列来保存该time_stamp
列的值 + 5 分钟时,我都会收到错误消息。
消息 242,级别 16,状态 3,第 1
行将字符数据类型转换为日期时间数据类型导致日期时间值超出范围。`
我想要做的是创建一个比time_stamp
. 我现在正在处理一份显示“已完成订单”的报告,但我需要在报告中将订单显示为“已完成”之前至少 5 分钟将其保留为“未完成”。
好吧,首先,您应该修复您的表并使用正确类型的列存储日期/时间数据,而不是出于未知原因将其分解。将时间存储为 a 是谁的决定
CHAR(6)
?你能想出一个很好的理由吗?你在哪里存储日期?那是今天下午 1 点,上周二,还是 2012 年 10 月的某个时候?这确实应该是一个日期时间列。有“设计师”请阅读这个和这个。但除此之外(有趣的是每次你建议换一张桌子,他们都说他们不能换桌子):
结果:
如果您发现该查询丑陋且乏味,那很好!有一个很好的理由:您存储的数据有误。
这也不会是您使用此设计遇到的最后一个问题。是什么阻止某人在您的专栏中插入
967286
或foobar
或?如果您需要解决该问题,您可以在 2012 年及更高版本中使用(请始终使用特定于版本的标记指定版本),或在早期版本中使用表达式。<empty string>
CHAR(6)
TRY_CONVERT()
CASE