请给我一个简单的查询,如下所示。
SELECT d.id,d.dia FROM dbo.debtor d WHERE ISNUMERIC(dia + 'e0') = 1
当我运行以上操作时,我想要的是什么。它返回dia为数字的两列中的所有记录。但是,我想通过添加dia是数字且大于或小于数字来过滤更多。我的查询失败。
SELECT d.id,d.dia FROM dbo.debtor d
WHERE ISNUMERIC(dia + 'e0') = 1 and cast(dia as float) > 6
请任何帮助将不胜感激。如何将nvarchar的dia转换为float?
答案 0 :(得分:0)
尝试
ISNUMERIC('' + dia + 'e0')
答案 1 :(得分:0)
您需要检查查询计划,以查看是否按正确的顺序评估where子句。
您可以通过将第二个条件放在外部select语句中来实现所需的结果,这样它只会评估具有数字dia的记录。
答案 2 :(得分:0)
考虑你的WHERE子句
WHERE ISNUMERIC(dia + 'e0') = 1 and cast(dia as float) > 6
没有特定的顺序将首先执行这两个条件。
假设dia不是数字,然后首先执行条件cast(dia as float) > 6
,然后在条件cast(dia as float)
中进行转换将抛出错误,因为值无法转换为浮动。
为了确保转换条件仅适用于数值,您必须在WHERE子句中应用CASE,如下所示
SELECT d.id,d.dia FROM dbo.debtor d
WHERE ISNUMERIC(dia + 'e0') = 1 and
6 < CASE WHEN ISNUMERIC(dia + 'e0') = 1 THEN cast(dia as float) ELSE 1 END