MS SQL Select/Where 函数仅匹配值的第一位
MS SQL Select/Where Function Only Matching on First Digit of Value
我的 MS SQL 数据库中有以下 tables -
停机时间
Row | Time | Running | FaultID | Fault
----|------|---------|---------|-------
1 |00:00 | 1 | 110 | -
2 |00:10 | 0 | 110 | A
3 |02:00 | 1 | 320 | -
4 |02:15 | 0 | 1 | A
5 |02:40 | 1 | 350 | -
6 |04:00 | 0 | 158 | A
7 |04:10 | 1 | 110 | -
8 |04:20 | 0 | 210 | C
7 |04:30 | 1 | 110 | -
9 |06:10 | 0 | 28 | C
10 |06:40 | 1 | 110 | -
故障代码
FaultCode | Fault
----------|-------
1 |A
28 |C
110 |D
158 |E
210 |F
320 |G
350 |H
所以 'Fault Codes' table 是所有代码定义的列表,'Downtime' 是实际的实时数据。 'Downtime' table 中的 Fault 列是具有此 SQL -
的计算列
(case when [Running]=(1) then NULL else [dbo].[UDF_KG78Faults]([FaultID]) end)
并且链接到的 UDF 具有此代码 -
FUNCTION [dbo].[UDF_KG78Faults] (@FaultID VarChar)
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @FaultDesc VARCHAR(100)
SELECT @FaultDesc = Fault
From KG78FaultCodes
WHERE FaultCode = @FaultID
RETURN @FaultDesc
现在这是我的问题 -
故障 ID 应该为每个唯一编号返回不同的故障描述。实际发生的情况是,当值类似于 1、15、110、150 等时;它只匹配使用第一个数字而不是整个条目。
FaultID 列最初被格式化为整数,但由于数据被拉入,我遇到了 int 转换错误。将其更改为 Varchar 解决了一个问题,但创建了这个新问题。
是否可以编辑我的 UDF 以匹配整个条目而不仅仅是第一个数字?
在您的函数定义中为@FaultID 添加一个长度(使其成为 VARCHAR(3) 或类似的东西)。如果您不指定 VARCHAR 长度,它将默认为 1,因此您传递给 UDF 的 FaultID 将被截断为 1 个字符。
我的 MS SQL 数据库中有以下 tables -
停机时间
Row | Time | Running | FaultID | Fault
----|------|---------|---------|-------
1 |00:00 | 1 | 110 | -
2 |00:10 | 0 | 110 | A
3 |02:00 | 1 | 320 | -
4 |02:15 | 0 | 1 | A
5 |02:40 | 1 | 350 | -
6 |04:00 | 0 | 158 | A
7 |04:10 | 1 | 110 | -
8 |04:20 | 0 | 210 | C
7 |04:30 | 1 | 110 | -
9 |06:10 | 0 | 28 | C
10 |06:40 | 1 | 110 | -
故障代码
FaultCode | Fault
----------|-------
1 |A
28 |C
110 |D
158 |E
210 |F
320 |G
350 |H
所以 'Fault Codes' table 是所有代码定义的列表,'Downtime' 是实际的实时数据。 'Downtime' table 中的 Fault 列是具有此 SQL -
的计算列(case when [Running]=(1) then NULL else [dbo].[UDF_KG78Faults]([FaultID]) end)
并且链接到的 UDF 具有此代码 -
FUNCTION [dbo].[UDF_KG78Faults] (@FaultID VarChar)
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @FaultDesc VARCHAR(100)
SELECT @FaultDesc = Fault
From KG78FaultCodes
WHERE FaultCode = @FaultID
RETURN @FaultDesc
现在这是我的问题 -
故障 ID 应该为每个唯一编号返回不同的故障描述。实际发生的情况是,当值类似于 1、15、110、150 等时;它只匹配使用第一个数字而不是整个条目。
FaultID 列最初被格式化为整数,但由于数据被拉入,我遇到了 int 转换错误。将其更改为 Varchar 解决了一个问题,但创建了这个新问题。
是否可以编辑我的 UDF 以匹配整个条目而不仅仅是第一个数字?
在您的函数定义中为@FaultID 添加一个长度(使其成为 VARCHAR(3) 或类似的东西)。如果您不指定 VARCHAR 长度,它将默认为 1,因此您传递给 UDF 的 FaultID 将被截断为 1 个字符。