SQL Server添加AND条件指定RadioFinalizedBy后查询结果为空求助
SQL Server查询无结果排查(RadioFinalizedBy条件失效)
问题背景
原始查询可正常返回2023年3月扫描完成后超过24小时才完成放射审核的记录:
SELECT RadioFinalizedBy, ProcedureType, DATEDIFF(HOUR, ScanCompleteDate,RadioFinalisedDate) As 'Date Diff', ScanCompleteDate, RadioFinalisedDate FROM VW_RisOrderTable WHERE YEAR(ScanCompleteDate) = 2023 AND MONTH(ScanCompleteDate) = 03 AND DATEDIFF(HOUR, ScanCompleteDate,RadioFinalisedDate) > 24;
但添加AND RadioFinalizedBy = 'Yasser Mahfouz'条件后,查询无结果返回;甚至执行最简单的SELECT * FROM VW_RisOrderTable WHERE RadioFinalizedBy = 'Yasser Mahfouz';也无结果,且确认存在符合条件的记录。
排查解决方案
检查字符串空格或不可见字符:字段值可能包含前后空格、全角空格或换行符,导致精确匹配失败。可通过以下语句验证:
-- 查看字段长度,对比预期长度 SELECT RadioFinalizedBy, LEN(RadioFinalizedBy) FROM VW_RisOrderTable WHERE RadioFinalizedBy LIKE '%Yasser Mahfouz%'; -- 用TRIM去除前后空格后匹配 SELECT * FROM VW_RisOrderTable WHERE TRIM(RadioFinalizedBy) = 'Yasser Mahfouz';验证大小写敏感性:若数据库或列的排序规则为区分大小写(如
Latin1_General_CS_AS),大小写不匹配会导致查询失败。可强制使用不区分大小写的排序规则测试:SELECT * FROM VW_RisOrderTable WHERE RadioFinalizedBy COLLATE Latin1_General_CI_AS = 'Yasser Mahfouz';检查视图定义:
VW_RisOrderTable是视图,RadioFinalizedBy字段可能存在转换、拼接或过滤逻辑,导致实际存储值与预期不符。执行以下语句查看视图定义:EXEC sp_helptext 'VW_RisOrderTable';排查字符编码差异:字段值可能包含视觉上无法区分的特殊编码字符,可通过ASCII码对比验证:
SELECT RadioFinalizedBy, ASCII(SUBSTRING(RadioFinalizedBy,1,1)) AS 实际首字符ASCII, ASCII(SUBSTRING('Yasser Mahfouz',1,1)) AS 预期首字符ASCII FROM VW_RisOrderTable WHERE RadioFinalizedBy LIKE '%Yasser%';测试Unicode字符串匹配:若
RadioFinalizedBy为nvarchar类型,未加N前缀的非Unicode常量可能导致隐式转换失败。尝试使用Unicode常量:SELECT * FROM VW_RisOrderTable WHERE RadioFinalizedBy = N'Yasser Mahfouz';
内容的提问来源于stack exchange,提问作者Atif
相关产品推荐
相关产品推荐

