BigInt不会转换为正确的日期格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BigInt不会转换为正确的日期格式相关的知识,希望对你有一定的参考价值。

所以我有一个我正在尝试编写的查询,其中有两列将具有可变结果。一个是约会,一个是时间。我的查询看起来像

Select Schedule ID , Job_Name , next_run_date , next_run_time

值将根据我正在运行的数据库而有所不同。例如,[next_run_date]可能= 20181014,[next_run_time]可能读取1000,即凌晨1点。但是如果我在不同的服务器上运行它,它可能会有一组完全不同的值,但格式相同。

我试图通过使用将列转换为日期/时间格式,但未成功

CONVERT(varchar(10),CONVERT(date,[next_run_date],110),110) AS 'Next Run' 

只是得到'不允许从数据类型int到日期的显式转换'

我想要展示的是[next_run_date] might = 10-14-2018[next_run_time] = 01:00。只是不确定如何正确转换它。我不必将privs写入数据库。如果我读得正确,至少对于日期列,我将不得不从Bigin转换为VarcharToDate,但不清楚如何完全写出来。

答案

对于时间字段,您可以在其中填充:。 并且格式时间低于上午10点。

日期部分可以用2个演员和CONVERTFORMAT完成。

以“mm-dd-yyyy”格式从INT到VARCHAR的日期:

CONVERT(VARCHAR(10), CAST(CAST([next_run_date] AS VARCHAR(8)) AS DATE), 110)

以“hh:mi”格式从INT到VARCHAR的时间:

STUFF(CAST(FORMAT([next_run_time],'000000') AS VARCHAR(4)),3,0,':')

示例代码段:

DECLARE @Table TABLE  (next_run_date INT, next_run_time INT);

INSERT INTO @Table (next_run_date, next_run_time) VALUES 
 (20180901,  13500)
,(20181015, 134200)
;

SELECT 
CONVERT(VARCHAR(10), CAST(CAST([next_run_date] AS VARCHAR(8)) AS DATE), 110) AS [Next Run Date],
STUFF(CAST(FORMAT([next_run_time],'000000') AS VARCHAR(4)),3,0,':') AS [Next Run Time]
FROM @Table

返回:

Next Run Date   Next Run Time
-------------   -------------
09-01-2018              01:35
10-15-2018              13:42
另一答案

您需要先将bigint转换为varchar,然后再转换为日期:

CONVERT(date,CONVERT(varchar(10),[next_run_date]),110) AS 'Next Run'
另一答案

您还可以将数字分成几部分并制作日期和时间。

DECLARE @Date INT=20181014
DECLARE @Time INT=123456

SELECT CONVERT(DATE,
    SUBSTRING(CONVERT(VARCHAR(20),@Date),1,4)+'/'+
    SUBSTRING(CONVERT(VARCHAR(20),@Date),5,2)+'/'+
    SUBSTRING(CONVERT(VARCHAR(20),@Date),7,2)
) AS [Date]

SELECT CONVERT(TIME,
    SUBSTRING(CONVERT(VARCHAR(20),@Time),1,LEN(CONVERT(VARCHAR(20),@Time))-4)+':'+
    SUBSTRING(CONVERT(VARCHAR(20),@Time),LEN(CONVERT(VARCHAR(20),@Time))-3,2)+':'+
    SUBSTRING(CONVERT(VARCHAR(20),@Time),LEN(CONVERT(VARCHAR(20),@Time))-1,2)
) AS [Time]
另一答案

select convert(datetime,cast(20181014 as varchar),102)

注意 :

CAST是ANSI-SQL规范的一部分;而CONVERT不是。实际上,CONVERT是SQL实现特定的。 CONVERT的不同之处在于它接受一个用于格式化的可选样式参数。

以上是关于BigInt不会转换为正确的日期格式的主要内容,如果未能解决你的问题,请参考以下文章

Bigint 到日期时间

将 bigint 转换为日期(月份名称)

SQL-将BIGINT(20)转换为日期时间数据类型

将日期字符串转换为正确的格式

使用 mySQL 中的行聚合和操作将 BigInt 时间戳转换为真实日期

java字符串格式转换成日期格式