首页 > 解决方案 > 如何用另一列中的值替换一列中的值

问题描述

我正在尝试根据一些条件将一列中的某些值替换为另一列的值。我原来的表是这样的:

 StartTime        EndTime       Hours    Location
12:00:00         00:30:00        5.5       A
12:00:00         00:30:00       -4.5       A
13:00:00         01:20:00       -6.5       B
12:30:00         04:06:00       -12.1      C
12:30:00         04:06:00       -12.1      B
12:30:00         04:06:00       -12.1      C

如果 Hours < 0 而不是 -12.1,我想在 EndTime 中将 AM 值翻转为 PM 值(或添加 12 小时)。例如,第二个结束时间是“12:30:00” PM,因为 Hours 小于 0 但不是 -12.1。但是,当 Hours 为 -12.1 时,我想将结束时间更改为 StartTime。

我试图用 case when 和 timedelta 来做到这一点,但它不起作用。有人可以帮忙吗?仅供参考,这就是我尝试过的。

 select 
   case when Hours < 0 and Hours <> -12.1 
   then dateadd(hh, 12, EndTime) 
   else StartTime end as EndTime,
   Hours, Location
from myTable

但即使在运行这段代码之后,我也看不到任何变化。另外,如果我用某个时间值而不是另一列中的值替换结束时间,我可以做这样的事情吗?

 select 
   case when Hours < 0 and Hours <> -12.1 
   then dateadd(hh, 12, EndTime) 
   else convert(time, '12:30:00') end as EndTime,
   Hours, Location
from myTable

但同样,使用这段代码,我看不到我的数据有任何变化。

标签: sqlsql-server

解决方案


这是做你想做的吗?

select (case when Hours < 0 and abs(Hours + 12.1) < 0.01
             then dateadd(hour, 12, EndTime) 
             else StartTime
        end) as EndTime,
       Hours, Location
from myTable;

我的猜测是这hours是一个浮点数并且12.1是一个近似值。所以这使用了一个近似值。


推荐阅读