sql - 将军用时间转换为标准时间误差
问题描述
我有一个数据集以小时/分钟格式回溯访问时间(例如 - 12:33 PM 将是 1233)。我正在尝试使用该DATEPART
函数,但它一直给我一个语法错误,指出:
“期待 '(' 和 'HOUR' 关键字之间的东西。
下面的部分是给我错误的 SQL 片段:
CASE WHEN DATEPART(HOUR , VSL.VISIT_TIME) > 12 THEN DATEPART (HOUR, VSL.VISIT_TIME) -12 ELSE DATEPART (HOUR, VSL.VISIT_TIME) END AS THE_TIME
我试图只得到时间的一部分。
解决方案
通过一系列演员来执行此操作,您可以执行以下操作:
SELECT CAST(CAST(CAST(CAST((1420 * 100 (FORMAT '99:99:99')) AS CHAR(8)) AS time ) AS TIME FORMAT 'HH:MIBT') AS CHAR(8))
或者您可以使用一些数学来对其进行排序并在最后进行转换:
SELECT
1420 AS intTime,
FLOOR(intTime/100) AS intHours,
intTime - (intHours * 100) AS intMinutes,
intHours * 60 + intMinutes AS totalIntMinutes,
TIME '00:00:00' + (totalIntMinutes * INTERVAL '1' MINUTE) AS totalTime,
CAST(CAST(totalTime AS TIME FORMAT 'HH:MIBT') AS CHAR(8)) AS char12HrTime
或者只是解析和数学:
SELECT
1420 AS intTime,
Trim(CASE WHEN FLOOR(intTime/100) > 12 then FLOOR(intTime/100) - 12 ELSE FLOOR(intTime/100) END) || ':' || TRIM(intTime - (FLOOR(intTime/100) * 100))
可能还有其他一些方法可以减少这种情况,也许更优雅一点。
无论哪种方式,这都会有点难看,因为您将时间存储为一种time
类型以外的东西。
推荐阅读
- f# - StackOverflow同时遍历带有记录键类型的地图
- java - 将 WAR 部署到 Wildfly 14 时 commons-lang3 的 ClassNotFoundException
- java - Java-Stream-API:地图归约
- typescript - Not able to import class in angular 5
- java - 在 JavaFX XYSeries 中找到最大 Y
- struct - 如何制作一个所有字段都是公共的公共结构而不为每个字段重复“pub”?
- java - stuck with a malfunctioning while loop
- android - 如何在 React Native 中获取在线当前日期和时间
- prestashop - My Prestashop Back Office Is not lising payment methods
- python - How to disable vscode autocomplete when using a dot after an integer in python?