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 到 date 的显式转换">

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

对于时间字段,您可以在其中填充:
以及上午 10 点以下时间的格式。

日期部分可以通过 2 个转换和一个转换或格式来完成。

从 INT 到 VARCHAR 的日期,格式为"mm-dd-yyyy":

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

从 INT 到 VARCHAR 的时间,格式为"hh:mi":

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]

选择 convert(datetime, cast(20181014 as varchar(, 102(

注意:

CAST 是 ANSI-SQL 规范的一部分;而 CONVERT 不是。 事实上,CONVERT 是特定于 SQL 实现的。转换差异 在于它接受一个可选的样式参数,该参数用于 格式。

最新更新