如何将varchar转换为数字以在WHERE子句中使用

时间:2019-03-15 05:39:54

标签: sql-server

我有此表,该表存储员工的信息。 Id的数据类型为bigint。现在在代码中,当开发人员向我发送ID以提取数据时,他以字符串格式向我发送邮件,因为显然他无法将此453, 454传递给整数字段。无论如何,有没有将其转换成bigint的方法,所以我可以将其用于IN运算符。

DECLARE @string varchar(25) = '453, 454'
SELECT FirstName+' '+LastName Employee FROM Employee WHERE ID IN (CAST(@string AS BIGINT))

运行此查询时,出现以下错误。希望有人能帮忙。

Msg 8114, Level 16, State 5, Line 2
Error converting data type varchar to bigint.

3 个答案:

答案 0 :(得分:5)

您应该认真地避免在您的SQL表中存储CSV数据,因为它表示未规范化的数据。就是说,有一种方法可以对@string中的数据进行稍许校正,即使是CSV数据也可以编写您的查询:

DECLARE @string varchar(25) = '453,454';

SELECT
    FirstName + ' ' + LastName Employee
FROM Employee
WHERE ',' + @string + ',' LIKE '%,' + CONVERT(varchar(10), ID) + ',%';

Demo

这里的技巧是将您输入的CSV 453,454转换成以下格式:

,453,454,

然后,我们只需在修改后的CSV字符串中搜索%,ID,%

答案 1 :(得分:3)

尝试一下

DECLARE @string varchar(25) = '453, 454';

SELECT FirstName + ' ' + LastName as Employee 
FROM Employee AS E
JOIN STRING_SPLIT(@string, ',') AS S
    ON S.value = E.ID

此处演示:(thanks to Tim Biegeleisen)

答案 2 :(得分:0)

我已经在db2中测试了以下查询,该查询对我有用。 原本具有INTEGER类型的ORDEREXECUTED列我可以在where子句中输入: 它对我有用:

SELECT ORDEREXECUTED, CAST(ORDEREXECUTED AS INTEGER), CAST(ORDEREXECUTED AS VARCHAR) FROM DATABASECHANGELOG WHERE CAST(ORDEREXECUTED AS VARCHAR)='2';

请参考以下屏幕截图: ORDEREXECUTED column having type INTEGER type

上述查询的输出:

enter image description here

相关问题