sql - 如何将持续时间添加到 hhmm 格式的字符串并将其转换回字符串?

标签 sql sql-server casting int varchar

我的表中有两列需要添加在一起。其中之一是带有军事时间的 varchar(4),减去冒号,包括前面的 0。另一种是 int,它描述约会的持续时间(以分钟为单位)。基本上我需要将两者添加在一起并将其保留为 varchar(4),所有格式都与第一列相同。我以前使用过 SQL,但没有以任何复杂的方式使用过。正确的做法是什么?谢谢!

我不必担心事情会延续到第二天。

例如:

time:       '1145'
duration:   45
sum:        '1230'

time:       '0915'
duration:   30
sum:        '0945' (not '945')

最佳答案

假设问题指出时间将始终采用 4 位数格式 hhmm。该查询从字符串中提取 hh 和 mm 并转换为时间。将持续时间(以分钟为单位)添加到该时间值,然后使用 CONVERT 转换回字符串格式 hh:mm函数和冒号被从字符串中删除以恢复到原始格式。

Click here to view the demo in SQL Fiddle.

脚本:

CREATE TABLE timevalues
(
        timestring  VARCHAR(20) NOT NULL
    ,   duration    INT NOT NULL
);

INSERT INTO timevalues (timestring, duration) VALUES
    ('1145', 30),
    ('2345', 25),
    ('0815', 125);

SELECT      timestring
        ,   duration
        ,   REPLACE(CONVERT(VARCHAR(5), DATEVALUE, 108), ':', '') AS newtimevalue
FROM
(
    SELECT  timestring
        ,   duration
        ,   DATEADD(MINUTE, 
                    duration, 
                    CAST(
                            (   SUBSTRING(timestring, 1, 2) + ':' + 
                                SUBSTRING(timestring, 3, 2)
                            ) AS DATETIME
                        )
                    ) AS DATEVALUE 
    FROM    timevalues
) T1;

输出:

timestring duration newtimevalue
---------- -------- -------------
  1145        30      1215
  2345        25      0010
  0815       125      1020

关于sql - 如何将持续时间添加到 hhmm 格式的字符串并将其转换回字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10400453/

相关文章:

sql - 一对多还是多对多?

sql - Postgresql 触发器根据一列的值更改或更新每一行中其他列的值。

sql-server - 分离批量运行的多个SQL Server语句

mysql - 当我们在表中仅使用主题 ID 时如何从表中选择主题名称

c# - 无法将 InputEventArgs 转换为 MouseEventArgs

mysql - "INSERT IF NOT EXISTS",否则更新 MySQL 中的某些列

mysql - 在mysql/sql中查找条件满足x次的记录

c - 以下代码对于结构指针有何作用?

sql-server - Entity Framework 和 SQL Server 同义词

java - 动态转换为每个数组类型