select * from fb_lab_test
where (report_item_code = 'HBcAb' and result like '%positive%')
or (
report_item_code = 'Anti-Hbc' and
case isnumeric(result) when 1 then cast(result as float) else 10000.0 end > 0.2
)
在这个sql中我有两个条件,当我使用其中一个时,没有错误,但是当我添加 OR
,出现错误:
将数据类型varchar转换为float时出错
有人能帮忙吗?谢谢。
这是示例数据
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE fb_lab_test(
[id] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[Test_No] [varchar](50) NULL,
[execute_date] [datetime] NULL,
[PatientId] [varchar](20) NULL,
[Visit_Id] [varchar](10) NULL,
[Patient_Type] [int] NULL,
[PatientName] [varchar](100) NULL,
[result_date_time] [datetime] NULL,
[report_item_name] [varchar](256) NULL,
[report_item_code] [varchar](50) NULL,
[result] [varchar](100) NULL
) ON [PRIMARY]
GO
INSERT INTO fb_lab_test values('5910315197','2019-10-31 00:40:53.000','111111','1','1','Tom','2019-10-31 08:56:54.000','test1','KET','-')
4条答案
按热度按时间92dk7w1h1#
sql server使用转换值的表达式会非常有趣。即使它看起来应该被过滤掉,有时查询处理器仍然会计算这些值。有时您可以通过稍微更改查询来绕过它。
尝试。。。
uinbv5nw2#
如果您使用的是受支持的sql server版本,则不要使用
isnumeric()
! 避免case
中的表达式where
条款。我想你想要:wj8zmpe13#
在查询中,result列与like运算符一起使用,like运算符的值作为varchar进行比较。
在最后一个条件中,您将结果强制转换为float,这将产生错误。
如果结果是5,它将被强制转换。如果结果是'xyz',它将不会被强制转换。
falq053o4#
如果没有错误,当你使用他们中的任何一个。所以您可以通过下面的查询语句进行处理: