1
|
Chris Loelke · 技术社区 · 6 年前 |
1
1
恐怕没有内置功能。 我刚刚写了一个,它是完全内联的ad-hoc SQL-但不会很快。。。 您可以尝试以下操作:
--你这样称呼它
--清理
结果
一些解释
遗憾的是,ISO 8601期间可以使用
中心代码是一个从字符串开始的递归CTE 逐字符 ,记住最后一个数字的起始位置并查找非数字。只要找到一个字母,前面的数值就会相应地相乘,并与前面的值相加,从而累加所有值。 |
2
0
下面的代码演示了ISO 8601 Duration格式子集的穷人解析器。
|
3
0
与当前的答案不同,我想建议一种不基于递归CTE的解决方案。 我的解决方案根本不验证这些值,只是尝试解析它们。 我只实现了对时间部分(小时、分钟和秒)的解析,但很容易扩展以支持其他部分。 尽管如此,我不确定这是否是处理持续时间的最佳方式。一旦指定了月数,就无法使用确定性函数将ISO8601持续时间转换为表示任何时间单位的数字,因为一个月可以有28到31天的时间。 在我看来,这样的持续时间只能通过从另一个日期时间值中加上或减去持续时间来计算日期时间值。 现在,讨论够了,让我们看看一些代码!
使用cte获取持续时间所有部分的位置,
和另一个处理缺失值的cte(即
从该cte中选择,计算其表示为浮点值的小时数:
结果:
|
Kenzo_Gilead · 如何读取一个表并在另一个表中插入不同的值 6 年前 |
syed mohsin · SQL Server上周从sun到sat 6 年前 |
mistaq · SQL Server-两边都有条件的条件左连接 6 年前 |
Haminteu · 从行号SQL获取ID 6 年前 |
shami sheikh · 以表的形式获取多个Select查询值 6 年前 |