【问题标题】:Converting hours into minutes in SQL在 SQL 中将小时转换为分钟
【发布时间】:2016-11-24 01:03:34
【问题描述】:

我正在尝试编写一个将小时转换为分钟的正则表达式。 目前我有一个值,它给出了点之前的小时数和点之后的分钟数,例如 6.10 是 6 小时 10 分钟。

我可以使用正则表达式查找点之前的值并乘以 60(得到分钟),然后在点之后添加值(已经以分钟为单位)吗?

因此,按照之前使用的示例,它会: (6 * 60) + 10

谢谢!

【问题讨论】:

  • 我没有使用过 Teradata 正则表达式,但是.....没有。正则表达式在字符串中查找内容。他们不做计算。您需要提取值并单独执行。
  • 你知道我该怎么做吗?我尝试使用 DATEPART (hh,field) 但它返回一条错误消息,指出 hh 现在是已定义的类型名称。谢谢
  • 您要搜索的字段的数据类型是什么?
  • 您的输入是什么?它是date 对象还是总是hh.mm

标签: sql teradata


【解决方案1】:

有一个STRTOK 函数来标记一个字符串,然后它就是:

select '12.34' as x, 
    cast(strtok(x,'.',1) as int) * 60 + cast(strtok(x,'.',2) as int)

【讨论】:

    【解决方案2】:

    如果你的值“6.10”存储为字符串,先转换成数字:

    SET @Input = CAST(@InputString AS FLOAT)
    

    然后,使用ModulusFloor

    总分钟数 = 小数部分 * 100 + 整数部分 * 60。

    所以如果你的值6.10 包含在一个名为@Input 的变量中,那么你可以得到你想要的值

    SET @Output = (@Input % 1) * 100 + FLOOR(@Input, 0)  * 60
    

    如果它在一张桌子上,那么更像这样的东西会更合适:

    SELECT (Input % 1) * 100 + FLOOR(Input, 0) * 60 Output 
    FROM   Table
    

    上述方法仅适用于分钟填充为零的情况,例如6 小时 5 分钟 = 6.05。如果您改为表示没有填充的分钟(6 小时 5 分钟 = 6.5),请使用under 建议的方法。

    【讨论】:

    • 不要ROUND,最好TRUNCCAST( AS INT)。在6.55 上尝试您的方法:)
    【解决方案3】:

    对于这样一个简单的字符串操作,正则表达式可能是一种过度杀伤力。您所需要的只是获取点位置的 INDEX 函数和获取小时和分钟的 SUBSTR 函数。

    点位置:

     select INDEX([yourstring], '.') 
    

    小时(点之前):

     select SUBSTR([yourstring], 1, INDEX([yourstring], '.')  - 1)
    

    分钟(点之后):

     select SUBSTR([yourstring], INDEX([yourstring], '.') + 1) 
    

    【讨论】:

    • 不客气!如果这是您所追求的,请接受答案。
    • 当然,我该怎么做?对不起,我是这个论坛的新手!
    • 只需点击答案旁边的复选标记 :-)
    猜你喜欢
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 2015-05-18
    • 2018-12-26
    • 2020-06-27
    相关资源
    最近更新 更多