我有这个字符串:PT0H8M30S."H"前的数字表示小时数,"M"前的数字表示分钟数,"S"前的数字表示秒数....如何使用SQL函数将其转换为分钟数?
结果应该是:8,5分钟
非常感谢!!!!
我们可以使用SQL Server(基本字符串函数PATINDEX,CHARINDEX和SUBSTRING)来分析你的时间字符串.为了让结局各单位的点,我们可以寻找H,M或S.为了获得起点,我们可以查找紧接在特定时间单位之前的一位或两位数.这导致了一些冗长的SQL Server代码,但它对于任何时间单元的存在/不存在都是相当健壮的,无论出现的顺序如何.
WITH yourTable AS (
SELECT 'PTx10H48M30S' AS string UNION ALL
SELECT 'P2DT3H4M'
)
SELECT
CASE WHEN CHARINDEX('D', string) > 0
THEN
CASE WHEN PATINDEX('%[0-9][0-9]D%', string) > 0
THEN CONVERT(float, SUBSTRING(string, PATINDEX('%[0-9][0-9]D%', string), 2)) * 24 * 60
ELSE CONVERT(float, SUBSTRING(string, PATINDEX('%[0-9]D%', string), 1)) * 24 * 60 END
ELSE 0.0 END
+
CASE WHEN CHARINDEX('H', string) > 0
THEN
CASE WHEN PATINDEX('%[0-9][0-9]H%', string) > 0
THEN CONVERT(float, SUBSTRING(string, PATINDEX('%[0-9][0-9]H%', string), 2)) * 60
ELSE CONVERT(float, SUBSTRING(string, PATINDEX('%[0-9]H%', string), 1)) * 60 END
ELSE 0.0 END
+
CASE WHEN CHARINDEX('M', string) > 0
THEN
CASE WHEN PATINDEX('%[0-9][0-9]M%', string) > 0
THEN CONVERT(float, SUBSTRING(string, PATINDEX('%[0-9][0-9]M%', string), 2))
ELSE CONVERT(float, SUBSTRING(string, PATINDEX('%[0-9]M%', string), 1)) END
ELSE 0.0 END
+
CASE WHEN CHARINDEX('S', string) > 0
THEN
CASE WHEN PATINDEX('%[0-9][0-9]S%', string) > 0
THEN CONVERT(float, SUBSTRING(string, PATINDEX('%[0-9][0-9]S%', string), 2)) / 60
ELSE CONVERT(float, SUBSTRING(string, PATINDEX('%[0-9]S%', string), 1)) / 60 END
ELSE 0.0 END
FROM yourTable;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |