在 SQL 存储过程中将日期时间转换为 varchar
Converting datetime to varchar in SQL Stored Procedure
我有一个存储过程引用列名的 CycleStartedOn
和 CycleEndedOn
。这两列都是 datetime
数据类型。我的目标是将它们转换为 varchar(MAX)
。我有变量 @CBFCycleStart
和 @CBFCycleEnd
保存这些值。我编译的代码但是我不确定我是否做错了或者是否有更有效和更好的方法来实现这个目标。这是我正在使用的代码:
DECLARE @CBFCycleStart as varchar(MAX)
DECLARE @CBFCycleEnd as varchar(MAX)
SELECT
@CBFCycleStart = (SELECT TOP 1 CONVERT(varchar(MAX), [CycleStartedOn], 120) FROM [IPEC_P_CIP_TKB_PREFLT] WHERE [CycleComplete] = '1' ORDER BY [CycleStartedOn] DESC)
,@CBFCycleEnd = (SELECT TOP 1 CONVERT(varchar(MAX), [CycleEndedOn], 120) FROM [IPEC_P_CIP_TKB_PREFLT] WHERE [CycleComplete] = '1' ORDER BY [CycleStartedOn] DESC)
DECLARE @tblReports TABLE
(
CBFCycleStart varchar(MAX)
,CBFCycleEnd varchar(MAX)
)
INSERT INTO @tblReports
(
CBFCycleStart
,CBFCycleEnd
)
Values
(
@CBFCycleStart
,@CBFCycleEnd
)
SELECT * FROM @tblReports
END
您可以像这样简化它:
DECLARE @tblReports TABLE
(
CBFCycleStart varchar(MAX)
, CBFCycleEnd varchar(MAX)
)
INSERT INTO @tblReports
(
CBFCycleStart
, CBFCycleEnd
)
SELECT TOP 1
CONVERT(varchar(MAX), [CycleStartedOn], 120)
, CONVERT(varchar(MAX), [CycleEndedOn], 120)
FROM [IPEC_P_CIP_TKB_PREFLT]
WHERE [CycleComplete] = '1'
ORDER BY [CycleStartedOn] DESC
SELECT * FROM @tblReports
它还提供了更多的确定性,即您总是从同一行中进行选择。
编辑
如果你需要INSERT
之后的变量,你可以使用:
DECLARE @CBFCycleStart as varchar(MAX)
DECLARE @CBFCycleEnd as varchar(MAX)
SELECT TOP 1
@CBFCycleStart = CONVERT(varchar(MAX), [CycleStartedOn], 120)
, @CBFCycleEnd = CONVERT(varchar(MAX), [CycleEndedOn], 120)
FROM [IPEC_P_CIP_TKB_PREFLT]
WHERE [CycleComplete] = '1'
ORDER BY [CycleStartedOn] DESC
DECLARE @tblReports TABLE
(
CBFCycleStart varchar(MAX)
, CBFCycleEnd varchar(MAX)
)
INSERT INTO @tblReports
(
CBFCycleStart
, CBFCycleEnd
)
VALUES
(
@CBFCycleStart
, @CBFCycleEnd
)
SELECT * FROM @tblReports
你可以备用一个 select 因为两个 select 同一行
SELECT TOP 1 @CBFCycleStart = CONVERT(varchar(MAX), [CycleStartedOn], 120)
,@CBFCycleEnd = CONVERT(varchar(MAX), [CycleEndedOn], 120)
FROM [IPEC_P_CIP_TKB_PREFLT]
WHERE [CycleComplete] = '1'
ORDER BY [CycleStartedOn] DESC;
我有一个存储过程引用列名的 CycleStartedOn
和 CycleEndedOn
。这两列都是 datetime
数据类型。我的目标是将它们转换为 varchar(MAX)
。我有变量 @CBFCycleStart
和 @CBFCycleEnd
保存这些值。我编译的代码但是我不确定我是否做错了或者是否有更有效和更好的方法来实现这个目标。这是我正在使用的代码:
DECLARE @CBFCycleStart as varchar(MAX)
DECLARE @CBFCycleEnd as varchar(MAX)
SELECT
@CBFCycleStart = (SELECT TOP 1 CONVERT(varchar(MAX), [CycleStartedOn], 120) FROM [IPEC_P_CIP_TKB_PREFLT] WHERE [CycleComplete] = '1' ORDER BY [CycleStartedOn] DESC)
,@CBFCycleEnd = (SELECT TOP 1 CONVERT(varchar(MAX), [CycleEndedOn], 120) FROM [IPEC_P_CIP_TKB_PREFLT] WHERE [CycleComplete] = '1' ORDER BY [CycleStartedOn] DESC)
DECLARE @tblReports TABLE
(
CBFCycleStart varchar(MAX)
,CBFCycleEnd varchar(MAX)
)
INSERT INTO @tblReports
(
CBFCycleStart
,CBFCycleEnd
)
Values
(
@CBFCycleStart
,@CBFCycleEnd
)
SELECT * FROM @tblReports
END
您可以像这样简化它:
DECLARE @tblReports TABLE
(
CBFCycleStart varchar(MAX)
, CBFCycleEnd varchar(MAX)
)
INSERT INTO @tblReports
(
CBFCycleStart
, CBFCycleEnd
)
SELECT TOP 1
CONVERT(varchar(MAX), [CycleStartedOn], 120)
, CONVERT(varchar(MAX), [CycleEndedOn], 120)
FROM [IPEC_P_CIP_TKB_PREFLT]
WHERE [CycleComplete] = '1'
ORDER BY [CycleStartedOn] DESC
SELECT * FROM @tblReports
它还提供了更多的确定性,即您总是从同一行中进行选择。
编辑
如果你需要INSERT
之后的变量,你可以使用:
DECLARE @CBFCycleStart as varchar(MAX)
DECLARE @CBFCycleEnd as varchar(MAX)
SELECT TOP 1
@CBFCycleStart = CONVERT(varchar(MAX), [CycleStartedOn], 120)
, @CBFCycleEnd = CONVERT(varchar(MAX), [CycleEndedOn], 120)
FROM [IPEC_P_CIP_TKB_PREFLT]
WHERE [CycleComplete] = '1'
ORDER BY [CycleStartedOn] DESC
DECLARE @tblReports TABLE
(
CBFCycleStart varchar(MAX)
, CBFCycleEnd varchar(MAX)
)
INSERT INTO @tblReports
(
CBFCycleStart
, CBFCycleEnd
)
VALUES
(
@CBFCycleStart
, @CBFCycleEnd
)
SELECT * FROM @tblReports
你可以备用一个 select 因为两个 select 同一行
SELECT TOP 1 @CBFCycleStart = CONVERT(varchar(MAX), [CycleStartedOn], 120)
,@CBFCycleEnd = CONVERT(varchar(MAX), [CycleEndedOn], 120)
FROM [IPEC_P_CIP_TKB_PREFLT]
WHERE [CycleComplete] = '1'
ORDER BY [CycleStartedOn] DESC;