DATETIME - 来自 Informix 的 HH:MM:SS 格式的 DATETIME
DATETIME - DATETIME in HH:MM:SS format from Informix
我有 2 个字段 (login,logout
) INTEGER 类型与 UNIX 时间,但是当我使用 DBINFO 进行减法 (logout-login
) 时 returns: 0 05:50:23
,但我需要第一个数字 没有 的值(在本例中为零)。
我正在使用 Informix 11。
这是我使用的表达方式:
DBINFO('utc_to_datetime', logout) -
DBINFO('utc_to_datetime', login)
结果:
0 05:50:23
如何去掉前导零?
两个 DATETIME YEAR TO SECOND
值之间的差异默认为 INTERVAL DAY(n) TO SECOND
值 (n = 8),前导 0
告诉您有 0 天(加上 5小时等)在时间之间的差异。您似乎更希望得到 INTERVAL HOUR(9) TO SECOND
结果,因此您需要提出要求:
SELECT CAST(DBINFO('utc_to_datetime', logout) -
DBINFO('utc_to_datetime', login) AS INTERVAL HOUR(9) TO SECOND)
FROM AnonymousTableWithColsLoginAndLogout
测试:
CREATE TABLE AnonymousTableWithColsLoginAndLogout
(
login INTEGER NOT NULL,
logout INTEGER NOT NULL
);
INSERT INTO AnonymousTableWithColsLoginAndLogout VALUES(1473961283, 1473961283 + (5 * 60 + 50) * 60 + 23);
SELECT CAST(DBINFO('utc_to_datetime', logout) -
DBINFO('utc_to_datetime', login) AS INTERVAL HOUR(9) TO SECOND)
FROM AnonymousTableWithColsLoginAndLogout
;
结果:
5:50:23
关键是了解差异返回的数据类型,并了解如何将其转换为您想要的类型。
注意如果相差3天5小时50分23秒,那么结果会显示为77:50:23
.
顺便说一句,您可以通过以下方式避免使用 DBINFO:
SELECT CAST((logout - login) UNITS SECOND AS INTERVAL HOUR(9) TO SECOND)
From AnonymousTableWithColsLoginAndLogout;
它产生相同的答案。
Is there a way to have this format: HH:MM:SS. I mean, in the example you gave me, is there a way to add a zero before number 5?
不确定,但可能。一期是 'which language are you collecting the results in'?还是'how are you converting the INTERVAL DAY(9) TO SECOND into a string'?它可能会影响选项。我正在使用我的 SQLCMD — 一个 DB-Access 工作方式有点相似但更好的程序。如果您需要在类似的环境中执行此操作,而不是 C 或 Java 或 C# 或……,那么您可以编写 ghastligrams 检查字符串中是否有单个前导数字,如果没有则添加零。还有一个技巧:
SELECT EXTEND(DATETIME(2000-01-01 00:00:00) YEAR TO SECOND +
CAST((logout - login) UNITS SECOND AS INTERVAL HOUR(9) TO SECOND), HOUR TO SECOND)
From AnonymousTableWithColsLoginAndLogout;
在前面的样本数据上,产生了预期的结果:
05:50:23
DATETIME 文字中指定的日期是任意的;关键是使用'midnight'。结果现在是 DATETIME HOUR TO SECOND 而不是 INTERVAL HOUR(9) TO SECOND 或类似的。这意味着如果您有 24 小时或更长时间的间隔,您将无法很好地表示数据,因为它会产生一个以 24 小时为模的答案。添加会成功,但有关额外天数的信息将被丢弃。间隔24小时以内,没问题。
您可能需要查看 TO_CHAR()
函数在格式化 INTERVAL 时是否提供足够的格式控制(实际上,您需要检查它是否完全接受间隔类型,以及如果给出一个)。
我有 2 个字段 (login,logout
) INTEGER 类型与 UNIX 时间,但是当我使用 DBINFO 进行减法 (logout-login
) 时 returns: 0 05:50:23
,但我需要第一个数字 没有 的值(在本例中为零)。
我正在使用 Informix 11。
这是我使用的表达方式:
DBINFO('utc_to_datetime', logout) -
DBINFO('utc_to_datetime', login)
结果:
0 05:50:23
如何去掉前导零?
两个 DATETIME YEAR TO SECOND
值之间的差异默认为 INTERVAL DAY(n) TO SECOND
值 (n = 8),前导 0
告诉您有 0 天(加上 5小时等)在时间之间的差异。您似乎更希望得到 INTERVAL HOUR(9) TO SECOND
结果,因此您需要提出要求:
SELECT CAST(DBINFO('utc_to_datetime', logout) -
DBINFO('utc_to_datetime', login) AS INTERVAL HOUR(9) TO SECOND)
FROM AnonymousTableWithColsLoginAndLogout
测试:
CREATE TABLE AnonymousTableWithColsLoginAndLogout
(
login INTEGER NOT NULL,
logout INTEGER NOT NULL
);
INSERT INTO AnonymousTableWithColsLoginAndLogout VALUES(1473961283, 1473961283 + (5 * 60 + 50) * 60 + 23);
SELECT CAST(DBINFO('utc_to_datetime', logout) -
DBINFO('utc_to_datetime', login) AS INTERVAL HOUR(9) TO SECOND)
FROM AnonymousTableWithColsLoginAndLogout
;
结果:
5:50:23
关键是了解差异返回的数据类型,并了解如何将其转换为您想要的类型。
注意如果相差3天5小时50分23秒,那么结果会显示为77:50:23
.
顺便说一句,您可以通过以下方式避免使用 DBINFO:
SELECT CAST((logout - login) UNITS SECOND AS INTERVAL HOUR(9) TO SECOND)
From AnonymousTableWithColsLoginAndLogout;
它产生相同的答案。
Is there a way to have this format: HH:MM:SS. I mean, in the example you gave me, is there a way to add a zero before number 5?
不确定,但可能。一期是 'which language are you collecting the results in'?还是'how are you converting the INTERVAL DAY(9) TO SECOND into a string'?它可能会影响选项。我正在使用我的 SQLCMD — 一个 DB-Access 工作方式有点相似但更好的程序。如果您需要在类似的环境中执行此操作,而不是 C 或 Java 或 C# 或……,那么您可以编写 ghastligrams 检查字符串中是否有单个前导数字,如果没有则添加零。还有一个技巧:
SELECT EXTEND(DATETIME(2000-01-01 00:00:00) YEAR TO SECOND +
CAST((logout - login) UNITS SECOND AS INTERVAL HOUR(9) TO SECOND), HOUR TO SECOND)
From AnonymousTableWithColsLoginAndLogout;
在前面的样本数据上,产生了预期的结果:
05:50:23
DATETIME 文字中指定的日期是任意的;关键是使用'midnight'。结果现在是 DATETIME HOUR TO SECOND 而不是 INTERVAL HOUR(9) TO SECOND 或类似的。这意味着如果您有 24 小时或更长时间的间隔,您将无法很好地表示数据,因为它会产生一个以 24 小时为模的答案。添加会成功,但有关额外天数的信息将被丢弃。间隔24小时以内,没问题。
您可能需要查看 TO_CHAR()
函数在格式化 INTERVAL 时是否提供足够的格式控制(实际上,您需要检查它是否完全接受间隔类型,以及如果给出一个)。