所以我有一个查询,我正在尝试编写其中有两列将具有可变结果。一个是日期,一个是时间。我的查询将如下所示
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
转换为Varchar
到ToDate
,但不清楚如何完全写。
对于时间字段,您可以在其中填充:
。
以及上午 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 实现的。转换差异 在于它接受一个可选的样式参数,该参数用于 格式。