在单个字段中将日期和时间的单独 varchar 值连接到完整的日期时间



也许我的问题太复杂了,或者我只是措辞不正确,但我很难找到答案。我将尽可能简短和清楚。

我在 SQL Server 2005 中有两个单独的表,每个表都通过单独的应用程序进行更新。由于这些应用程序的限制,表的构建方式完全不同。在表 A 中,订单的日期和时间以 108 格式存储为 DATETIME(即 14/11/2013 08:15:00)。在表 B 中,这些值由插入它们的触发器自动拆分。它们被划分为 VARCHAR 类型的单独字段(即 Day = '14/11/2013' 和 HourFrom = '0815')。

不幸的是,这些参数超出了我的控制范围。如果我尝试以不同于 SQL 端的方式格式化任一表,则两个应用程序都将失败。(不要让我开始...

我的基本问题是:当履行订单的司机更新表 B 时,新值需要从表 B 更新到表 A 中。例如,如果订单是在 08:15 到 09:00 之间写在表 A 中的,但驾驶员实际上在 08:30 取了订单,并且仅在 09:15 完成了运行,则必须根据驱动程序插入表 B 的新值更新表 A 中的时间。

我的问题是我很难从表 B 中获取 VARCHAR 值,在时间中插入冒号以便转换函数接受它们,将它们与 day 字段连接起来,然后将整个值更新到表 A 中。我收到很多错误,告诉我转换失败的所有不同方式,所以我不打算一一列出。如果有一种快速、干净的方法来进行这种转换,我还没有找到。任何帮助将不胜感激。

我是SQL的新手,我认为这就是为什么我的残酷霸主把这个项目扔给我的原因;我很快就学到了很多东西,但像这样的时刻非常令人沮丧。

为什么类似的东西似乎对我不起作用?

@DAY = VARCHAR date value without time ("14/11/2013")
@HOURFROM = VARCHAR hour value ("0800")

[这些值已在表B的数据库中确定]

convert(DATETIME,(@DAY+' '+LEFT(@HOURFROM,2)+':'+RIGHT(@HOURFROM,2)),108)

[我想将此值建立为 DATETIME,108,然后将该值更新到表 A 中]

或简称

select convert(datetime,@day+ ' '+stuff(@hourfrom,3,0,':'),103) 

最新更新