Sql 如何将子查询的输出转换为数字
这是我的sql查询,其中我使用子查询访问所选字段 在此子查询中,返回Sql 如何将子查询的输出转换为数字,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,这是我的sql查询,其中我使用子查询访问所选字段 在此子查询中,返回 select rptName from RptTable where rpt_id in ( select LEFT(Reports, NULLIF(LEN(Reports)-1,-1)) from repoAccess1 where uid = 'VIKRAM' ) 返回 1,2 这意味着查询应该是 select LEFT(Reports, NULLIF(LEN(Reports
select rptName
from RptTable
where rpt_id in (
select LEFT(Reports, NULLIF(LEN(Reports)-1,-1))
from repoAccess1
where uid = 'VIKRAM'
)
返回
1,2
这意味着查询应该是
select LEFT(Reports, NULLIF(LEN(Reports)-1,-1))
from repoAccess1
where uid = 'VIKRAM'
但我得到了这个错误
select rptName
from RptTable where rpt_id in (1,2)
有谁能告诉我如何修改以获得精确的ans吗?没有具体的表定义,有点难说,但我很确定您正在尝试比较不同的数据类型。如果是这种情况,您可以利用,例如:
Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to numeric.
更新:因为您已经更新了问题:返回varchar
或nvarchar
数据类型的结果。因此,生成的查询将是
SELECT
[rptName]
FROM [RptTable]
WHERE [rpt_id] IN
(
SELECT
CONVERT(int, LEFT([Reports], NULLIF(LEN([Reports]) - 1, -1)))
FROM [repoAccess1]
WHERE [uid] = 'VIKRAM'
)
请注意值周围的撇号(这是正确的术语吗?)。由于
[rpt_id]
似乎属于数据类型int
,因此无法隐式转换这些值。这就是前面提到的CAST
或CONVERT
发挥作用的地方。如果没有具体的表定义,就有点难说,但我很确定您正在尝试比较不同的数据类型。如果是这种情况,您可以利用,例如:
Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to numeric.
更新:因为您已经更新了问题:返回varchar
或nvarchar
数据类型的结果。因此,生成的查询将是
SELECT
[rptName]
FROM [RptTable]
WHERE [rpt_id] IN
(
SELECT
CONVERT(int, LEFT([Reports], NULLIF(LEN([Reports]) - 1, -1)))
FROM [repoAccess1]
WHERE [uid] = 'VIKRAM'
)
请注意值周围的撇号(这是正确的术语吗?)。由于
[rpt_id]
似乎属于数据类型int
,因此无法隐式转换这些值。这就是前面提到的CAST
或CONVERT
发挥作用的地方。如果我理解正确,子查询将返回一行值为'1,2'
。这不是一个数字,因此存在错误
在继续之前,让我强调以逗号分隔的字符串存储值不是SQL的工作方式。每个id应该有一行,并定义适当的类型和外键
也就是说,有时候我们会被其他人糟糕的设计决策所困扰。如果是这种情况,您可以像一样使用:
SELECT
[rptName]
FROM [RptTable]
WHERE [rpt_id] IN('1', '2')
如果我理解正确,子查询将返回一行,其值为'1,2'
。这不是一个数字,因此存在错误
在继续之前,让我强调以逗号分隔的字符串存储值不是SQL的工作方式。每个id应该有一行,并定义适当的类型和外键
也就是说,有时候我们会被其他人糟糕的设计决策所困扰。如果是这种情况,您可以像
一样使用:
SELECT
[rptName]
FROM [RptTable]
WHERE [rpt_id] IN('1', '2')
当(左(Reports,NULLIF(LEN(Reports)-1,-1))
返回1或2时,查询将正常工作,因为SQL Server会隐式地将varchar值转换为数值
看来可能有数据问题。LEFT函数返回的数据之一是非数字的。为了找到特定的记录,可以使用isnumeric函数。试着这样,
select rptName
from RptTable
where rpt_id in (
select CAST(LEFT(Reports, NULLIF(LEN(Reports)-1,-1)) AS INT) as Val
from repoAccess1
where uid = 'VIKRAM'
)
当(左(Reports,NULLIF(LEN(Reports)-1,-1))
返回1或2时,查询将正常工作,因为SQL Server会隐式地将varchar值转换为数值
看来可能有数据问题。LEFT函数返回的数据之一是非数字的。为了找到特定的记录,可以使用isnumeric函数。试着这样,
select rptName
from RptTable
where rpt_id in (
select CAST(LEFT(Reports, NULLIF(LEN(Reports)-1,-1)) AS INT) as Val
from repoAccess1
where uid = 'VIKRAM'
)
您使用的是Postgresql还是MS SQL Server?(请不要标记未涉及的产品。)我刚刚删除了它。错误很明显。您使用的是Postgresql还是MS SQL Server?(请不要给未涉及的产品贴标签。)我刚刚删除了它。错误很明显。你的答案出现在低质量的队列中,主要是因为你只提供了代码。你能解释一下你使用了NULLIF和CAST的什么魔力吗?你的答案出现在低质量的队列中,主要是因为你只提供了代码。你能解释一下你使用了什么样的无主和施法魔法吗?