sql - 如何用另一列中的值替换一列中的值
问题描述
我正在尝试根据一些条件将一列中的某些值替换为另一列的值。我原来的表是这样的:
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
但同样,使用这段代码,我看不到我的数据有任何变化。
解决方案
这是做你想做的吗?
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
是一个近似值。所以这使用了一个近似值。
推荐阅读
- python-3.x - TypeError:“float”对象不能解释为整数:有办法吗?
- android - 单击两次底部导航栏时,RecyclerView 不显示项目
- c++ - 如何通过 UDP 发送多播数据 - 使用全局地址的 IPv6
- vb.net - 获取顶部/左侧位置的 PixelColor 以更改屏幕保护程序上的时间字符串
- python - 连续值> 100的序列平均长度(Python)
- audio - 在 ffmpeg 中为实时提要的音频流添加延迟
- c - Idk 如何从 .dat 文件中获取信息并使用 C 从中创建单个链表
- apache-spark - 消耗 500 个 Kafka 主题并编写 Parquet 的最佳策略是什么?
- javascript - 使用 JSON 数据的类中的 Javascript 递归
- android - 如何从模型类列表字符串值中设置私有静态字符串值