【问题标题】:Split nvarchar into to extract integer values in MySQL将 nvarchar 拆分为以在 MySQL 中提取整数值
【发布时间】:2017-03-28 18:06:35
【问题描述】:

我有 2 列:

Duration     |  ID  
0h 7m 55sec. |  1
0h 25m 33sec.|  2
10h 5m 5sec. |  3
4h 11m 31sec.|  4

持续时间(nvarchar(255)) 我想计算每个 ID 的总秒数的持续时间。 我尝试使用 SUBSTRING 然后 CAST 但它没有给我想要的输出。对此的任何帮助将不胜感激。

【问题讨论】:

  • SUBSTRING 然后 CAST 是这样做的方法,分享你有什么?
  • 嗨,Alex,感谢您对此进行验证。但问题是,我不确定如何在 'h' 'm' 's' 上拆分 nvarchar 当我使用 Substring(Duration, 4,CharIndex('m',Duration)) 它给了我例如7m 55 而不仅仅是 7
  • 再次发布您所拥有的,Stack Overflow 不是代码编写服务,您应该尝试自己编写代码。我建议您对您的问题进行一些研究(也许尝试页面顶部的搜索框)并尝试自己编写一些代码。如果/当您遇到任何代码问题时,请再次询问并解释您尝试过的内容,以及为什么它对您不起作用。请参阅 How to Ask 以获取有关提出好问题的帮助以及 Minimum, complete, verifiable example

标签: sql sql-server split nvarchar


【解决方案1】:

下面的查询是使用 str_to_date 转换字符串,time_to_sec 函数将时间部分转换为秒。

如果持续时间超过 23h 59m 59sec,此方法将中断。 @Gordon Linoff 的方法将处理这种情况。

select id,
       duration,
       time_to_sec(str_to_date(duration,'%Hh %im %ssec.')) as seconds_elapsed;

【讨论】:

    【解决方案2】:

    此答案适用于 MySQL,因为该问题最初已被标记。

    哎呀。但你可以这样做:

    select (substring_index(col, 'h ', 1) * 60 * 60 +
            substring_index(substring_index(col, 'm ', 2), ' ', -1) * 60 + 
            substring_index(substring_index(col, 'sec.',1),' ', -1)
           ) as duration_secs
    from t;
    

    这会提取每个组件,然后使用隐式转换进行计算。

    【讨论】:

    • 非常感谢戈登·林诺夫。您能否建议一种在 Sql server 上执行相同操作的方法?
    • @RMathis 我试图在 MySQL 和 SQL 服务器上执行相同的操作。但是我现在已经为 SQL server 添加了一个标签。谢谢你的建议。
    猜你喜欢
    • 2018-09-02
    • 1970-01-01
    • 2021-12-19
    • 2015-05-13
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    相关资源
    最近更新 更多