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
转换为Varchar
到ToDate
,但不清楚如何完全写出来。
对于时间字段,您可以在其中填充:
。
并且格式时间低于上午10点。
以“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不会转换为正确的日期格式的主要内容,如果未能解决你的问题,请参考以下文章