C# 将包含三个或四个字符的DB2十进制转换为有效时间
在数据库中,我们将时间存储为十进制。有些地方存储为三位数字,另一些地方存储为四位数字 e、 g 时间必须是04:15,我使用的是24小时时钟 我已经尝试使用了中的C# 将包含三个或四个字符的DB2十进制转换为有效时间,c#,sql,time,db2,C#,Sql,Time,Db2,在数据库中,我们将时间存储为十进制。有些地方存储为三位数字,另一些地方存储为四位数字 e、 g 时间必须是04:15,我使用的是24小时时钟 我已经尝试使用了中的cast语句,当时间表示为4位小数时,该语句非常有效。但是,当时间表示为3位数字时,我得到一个空值 谁能建议一个同时使用三位数和四位数小数的语句,并将其转换为时间 多亏了GMB 下面的工作,但不是像400,500,600等值的一点进展,但我不会在这里没有GMB的帮助 这项工作: SELECT cast( cast(floor(0415/
cast
语句,当时间表示为4位小数时,该语句非常有效。但是,当时间表示为3位数字时,我得到一个空值
谁能建议一个同时使用三位数和四位数小数的语句,并将其转换为时间
多亏了GMB
下面的工作,但不是像400,500,600等值的一点进展,但我不会在这里没有GMB的帮助
这项工作:
SELECT cast( cast(floor(0415/100) as varchar(2)) || ':' || cast(MOD(415,100) as varchar(2)) as time ) FROM "SYSIBM".SYSDUMMY1
这不起作用:
SELECT cast( cast(floor(0400/100) as varchar(2)) || ':' || cast(MOD(400,100) as varchar(2)) as time ) FROM "SYSIBM".SYSDUMMY1
注意,代码是针对DB2iSeries版本的,如果您运行的是LUWDB2,请使用GMB的答案
关于它为什么不适用于400、500等值的任何帮助信息?您需要将其构造为字符串:
select lpad(floor(time / 100), 2, '0') concat ':' concat lpad(time % 60, 2, '0')
如果愿意,您可以将其转换为时间。您需要将其构造为字符串:
select lpad(floor(time / 100), 2, '0') concat ':' concat lpad(time % 60, 2, '0')
然后,如果愿意,您可以将其转换为时间。您可以使用数字算术获得小时和分钟部分,然后转换为字符串、串联和转换为时间:
cast(
cast(floor(dec/100) as varchar(2)) || ':' || cast(dec%100 as varchar(2))
as time
)
:
create table t (dec decimal(10, 2));
insert into t values (415), (2359)
select dec, cast(
cast(floor(dec/100) as varchar(2))
|| ':'
|| cast(dec%100 as varchar(2))
as time) res
from t
12月|日
------: | -------:
415.00 | 04:15:00
2359.00 | 23:59:00
您可以使用数字算术获得小时和分钟部分,然后转换为字符串、串联和转换为时间:
cast(
cast(floor(dec/100) as varchar(2)) || ':' || cast(dec%100 as varchar(2))
as time
)
:
create table t (dec decimal(10, 2));
insert into t values (415), (2359)
select dec, cast(
cast(floor(dec/100) as varchar(2))
|| ':'
|| cast(dec%100 as varchar(2))
as time) res
from t
12月|日
------: | -------:
415.00 | 04:15:00
2359.00 | 23:59:00
您可以使用to_timestamp()
输入为十进制(4,0)
还是作为瓦查尔
select
time(to_timestamp(lpad(time_as_char, 4, '0'),'HH24MI')) time
from (values '0415', '415') data (time_as_char)
您可以使用to_timestamp()
输入为十进制(4,0)
还是作为瓦查尔
select
time(to_timestamp(lpad(time_as_char, 4, '0'),'HH24MI')) time
from (values '0415', '415') data (time_as_char)
下面的语句愉快地将0415转换为04:15 select CAST(SUBSTR(右('00'| |'0415',6),3,2)| |':'| | SUBSTR(右('00'| |'0415',6),5,2)作为时间)从“SYSIBM”。SYSDUMMY1下面的语句愉快地将0415转换为04:15 select CAST(右('00'| |'0415',6),3,2)| |':'来自“SYSIBM.SYSDUMMY1I”,我对世卫组织的DB2语法非常陌生。我喜欢你的回答。如何将单个十进制值转换为时间。我试过了,但失败了。从“SYSIBM”中选择cast(将地板(0415/100)转换为varchar(2))| |':'| |转换(415%100转换为varchar(2))作为时间)。SYSDUMMY1@Abe:你为什么说它失败了?你有错误吗?错误的结果?我测试了你的代码,它似乎工作得很好。谢谢你的关注。我使用的是DBeaver,如果我运行上面修改过的语句,我会得到一个错误-关键字“as”notexpectedanythinks?我使用的是DB2,用于查询DB的IDE是DBEaver。任何问题都可以问。@Abe:我对DBeaver没有专门的知识,所以我真的不知道。。。如果您运行我在回答中提供的查询(以…开头),您会得到相同的错误吗?我对who DB2语法非常陌生。我喜欢你的回答。如何将单个十进制值转换为时间。我试过了,但失败了。从“SYSIBM”中选择cast(将地板(0415/100)转换为varchar(2))| |':'| |转换(415%100转换为varchar(2))作为时间)。SYSDUMMY1@Abe:你为什么说它失败了?你有错误吗?错误的结果?我测试了你的代码,它似乎工作得很好。谢谢你的关注。我使用的是DBeaver,如果我运行上面修改过的语句,我会得到一个错误-关键字“as”notexpectedanythinks?我使用的是DB2,用于查询DB的IDE是DBEaver。任何问题都可以问。@Abe:我对DBeaver没有专门的知识,所以我真的不知道。。。如果您运行我在回答中提供的查询(以“
开头,以…”
开头),是否会出现相同的错误?