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

时间:2013-11-14 09:01:40

标签: sql-server datetime concatenation 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但是司机实际上是在08:30拿起它并且只在09:15完成了运行,表A中的时间必须根据驱动程序插入表B的那些新值进行更新。

我的问题是,我很难从表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]

1 个答案:

答案 0 :(得分:0)

或只是

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