如何解决将日期转换为数字数据类型
我正在尝试将日期转换为数字,如下所示,不确定哪个函数效果更好。
使用的数据库是SQL Server。
表格详细信息
boolean
我需要输出为4405726203-它的日期(create table test
(
id varchar(255),call_date varchar(255)
);
insert into test('26203','14-Aug-2020');
)+ id(14-Aug-2014
)的串联
解决方法
这个评论太长了。
SQL Server允许您将datetime
转换为浮点数。那应该是:
select cast(dte as float)
from (values (convert(datetime,'14-Aug-2020'))) v(dte)
但是,相应的浮点值为44055(https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=d142a64db0872e7572eb4fbd6d5d5fe7)。您的意图有点神秘。
您可以减去2,但这似乎是任意的。您可以计算自1899-12-30以来的天数。但这似乎也很武断。
无论如何,一旦您知道如何将日期转换为所需的数字,只需使用concat()
来组合值。
我找到了解决方法:
convert(varchar,CAST(CONVERT(datetime,call_date) as bigint)) + id
,
在后台,SQL Server DateTime
是2个32位整数的元组:
- 第一个整数是自该时期以来的天数,对于SQL Server,该整数为
1 January 1900
- 第二个整数是自一天开始(
00:00:00.000
)以来的毫秒数。除了计数以3或4毫米的增量递增。微软只知道为什么做出这个决定。
您可以使用
获取自纪元以来的天数convert( int,convert( date,t.call_date ) )
[在convert(varchar,... )
中将其包装成字符串]
看起来您的id
已经是varchar
,所以您可以说:
select compound_key = convert(varchar,convert(int,convert(date,call_date
)
)
)
+ t.id
from test t
我建议您将两个字段都以前导零填充到固定长度,以免发生可能的冲突(假设您尝试在此处生成密钥)。带符号的32位整数溢出了21亿ish,因此每个字段9位就足够了。
,这有效
select concat(datediff(d,cast(call_date as date)),id)
from
(values ('26203','14-Aug-2020')) v(id,call_date);
结果
4405526203
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。