sql - 如何以小时、分钟和秒为单位解析 SQL Server 字符串
问题描述
我将时间存储为PT1H22M59.551S
.
那里的读数为 1 小时 22 分 59.551 秒。
分割这个最有效的方法是什么?
数据可能是这样的。所以没有分隔符是强制性的
PT0S
PT6H4M29.212S
PT0S
PT2M55.126S
PT54M4.12S
PT3H6M5.74S
PT16H27M52.069S
解决方案
您还可以创建一个函数来执行带有基本文本操作的转换:
CREATE FUNCTION dbo.f_GetTime(@TimeInput VARCHAR(50)) RETURNS TIME
AS BEGIN
SET @TimeInput = REPLACE(REPLACE(@TimeInput, 'PT', ''), 'S', '')
IF CHARINDEX('H', @TimeInput) = 0 -- Add missing H
SET @TimeInput = '0H' + @TimeInput
IF CHARINDEX('M', @TimeInput) = 0 -- Add missing M
SET @TimeInput = REPLACE(@TimeInput, 'H', 'H0M')
RETURN CONVERT(TIME, REPLACE(REPLACE(@TimeInput, 'H', ':'), 'M', ':'))
END
GO
然后您可以将它与标量查询一起使用:
SELECT dbo.f_GetTime('PT1H22M59.551S') AS TimeValue
或者您可以将它与表格一起使用:
DECLARE @Input TABLE (TimeInput VARCHAR(20))
INSERT @Input VALUES ('PT1H22M59.551S'), ('PT0S'), ('PT6H4M29.212S'), ('PT0S'),
('PT2M55.126S'), ('PT54M4.12S'), ('PT3H6M5.74S'), ('PT16H27M52.069S')
SELECT TimeInput, dbo.f_GetTime(TimeInput) AS TimeValue FROM @Input
这将返回:
TimeInput TimeValue
-------------------- ----------------
PT1H22M59.551S 01:22:59.5510000
PT0S 00:00:00.0000000
PT6H4M29.212S 06:04:29.2120000
PT0S 00:00:00.0000000
PT2M55.126S 00:02:55.1260000
PT54M4.12S 00:54:04.1200000
PT3H6M5.74S 03:06:05.7400000
PT16H27M52.069S 16:27:52.0690000
推荐阅读
- angular - 组件未加载到功能模块路由器出口
- java - React Native Task :app:processDebugResources 无法执行 aapt
- java - 有没有办法让 JUnit 测试通过 iff 方法实现是正确的和递归的?
- javafx - 如何修复 JavaFX 中的“应用程序启动方法 java.lang.reflect.InvocationTargetException 中的异常”错误?
- spring - 获取 java.lang.ClassNotFoundException: org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
- php - 如何在 PHP 中使用 Spotify 获得关注者数量?
- c# - Lambda / Linq 左连接表不返回预期结果
- react-native - 如何设置导航大标题
- xcode - Xcode代码编辑器上的蓝线是什么意思
- python - Python Selenium 在 Facebook 上找不到添加照片和视频按钮元素