如何使用 T-SQL 使用点连接 2 个数字?
How to concatenate 2 numbers using dot using T-SQL?
我有一个 EmployeeAudit table,如下所示:
Id EmployeeId
1 100
2 101
我有一个 2 下面的变量:
DECLARE @Version INT = 10;
DECLARE @isAuditDone BIT = 0;
//logic to populate Version and isAuditDone
基于上述变量,我想检查审计是否完成,然后我想 return 来自 EmployeeAudit 的 ID,如下所示:
if @isAuditDone
return Id + '.' + Version = 1.10
else
return Id
查询:
select
(CASE
WHEN @isAuditDone = 1
THEN E.Id + '.' + @Version
WHEN @isAuditDone = 0
THEN E.Id
ELSE
E.Id
END) AS Id,
EmployeeId
from
EmployeeAudit E
但我遇到以下错误:
Conversion failed when converting the varchar value '.' to data type
int.
有人可以帮忙吗?
更新:
EXEC [dbo].[GetEmployeeAuditJson]
@employeeId = 101
SP return 输入 select statement
:
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER, INCLUDE_NULL_VALUES;
只是为了扩展 Aaron 的评论
您需要保持数据类型一致。在本例中为字符串。
select
(CASE
WHEN @isAuditDone = 1
THEN concat(E.Id,'.',@Version)
WHEN @isAuditDone = 0
THEN concat('',E.Id) -- Notice INT to string
ELSE
concat('',E.Id) -- Notice INT to string
END) AS Id,
EmployeeId
from
EmployeeAudit E
如果您想 return 存储过程中的整数值以外的值,则需要使用输出列。
所以在你的情况下你必须 return String 因为你有一个点来附加数字。
这是一个演示存储过程定义,您可以尝试使用它来满足您的需求。
CREATE PROCEDURE SProc
@Id varchar(500) OUTPUT
AS
select
(CASE
WHEN @isAuditDone = 1
THEN concat(E.Id,'.',@Version)
WHEN @isAuditDone = 0
THEN concat('',E.Id)
ELSE
concat('',E.Id)
END) AS Id,
EmployeeId
from
EmployeeAudit E
然后您可以像这样使用输出参数执行存储过程。
Declare @Id varchar(500)
EXEC SProc @Id OUTPUT
我有一个 EmployeeAudit table,如下所示:
Id EmployeeId
1 100
2 101
我有一个 2 下面的变量:
DECLARE @Version INT = 10;
DECLARE @isAuditDone BIT = 0;
//logic to populate Version and isAuditDone
基于上述变量,我想检查审计是否完成,然后我想 return 来自 EmployeeAudit 的 ID,如下所示:
if @isAuditDone
return Id + '.' + Version = 1.10
else
return Id
查询:
select
(CASE
WHEN @isAuditDone = 1
THEN E.Id + '.' + @Version
WHEN @isAuditDone = 0
THEN E.Id
ELSE
E.Id
END) AS Id,
EmployeeId
from
EmployeeAudit E
但我遇到以下错误:
Conversion failed when converting the varchar value '.' to data type int.
有人可以帮忙吗?
更新:
EXEC [dbo].[GetEmployeeAuditJson] @employeeId = 101
SP return 输入 select statement
:
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER, INCLUDE_NULL_VALUES;
只是为了扩展 Aaron 的评论
您需要保持数据类型一致。在本例中为字符串。
select
(CASE
WHEN @isAuditDone = 1
THEN concat(E.Id,'.',@Version)
WHEN @isAuditDone = 0
THEN concat('',E.Id) -- Notice INT to string
ELSE
concat('',E.Id) -- Notice INT to string
END) AS Id,
EmployeeId
from
EmployeeAudit E
如果您想 return 存储过程中的整数值以外的值,则需要使用输出列。 所以在你的情况下你必须 return String 因为你有一个点来附加数字。 这是一个演示存储过程定义,您可以尝试使用它来满足您的需求。
CREATE PROCEDURE SProc
@Id varchar(500) OUTPUT
AS
select
(CASE
WHEN @isAuditDone = 1
THEN concat(E.Id,'.',@Version)
WHEN @isAuditDone = 0
THEN concat('',E.Id)
ELSE
concat('',E.Id)
END) AS Id,
EmployeeId
from
EmployeeAudit E
然后您可以像这样使用输出参数执行存储过程。
Declare @Id varchar(500)
EXEC SProc @Id OUTPUT