Sql 在varchar字段中搜索特定范围的数值
使用Oracle SQL Developer v3.2.20.09: 我有一个数据表,其中,在所有其他数据中,我有一列所有数值结果(例如,Sql 在varchar字段中搜索特定范围的数值,sql,oracle,Sql,Oracle,使用Oracle SQL Developer v3.2.20.09: 我有一个数据表,其中,在所有其他数据中,我有一列所有数值结果(例如,RESULT\u NUM),但由于它的存储和使用方式,是一个varchar2字段。我需要提取体温代码的所有记录(BT,TEMP,Temperature,在VT\u code字段中),其中result\u num>100(所有内容都是华氏温度,因此仅搜索结果即可) 因此,我的简单陈述是: Select * from VITALS where VT_CODE in
RESULT\u NUM
),但由于它的存储和使用方式,是一个varchar2字段。我需要提取体温代码的所有记录(BT
,TEMP
,Temperature
,在VT\u code
字段中),其中result\u num>100
(所有内容都是华氏温度,因此仅搜索结果即可)
因此,我的简单陈述是:
Select * from VITALS where VT_CODE in ('BT', 'TEMP', 'TEMPERATURE');
这让我恢复了所有体温记录,超过200万。现在我需要对其进行优化,以获得超过100个的结果
当我尝试添加“andresult\u num>100
”时,我得到一个错误,因为它是一个varchar字段,我试图用一个数字搜索
当我尝试添加“andresult\u num>'100'
”时,它执行时没有错误,因为它是一个字符值,但它返回大于1的所有值,而不是100的所有值,这显然是所有值
请帮助。尝试以下操作
和convert(int,result_num)>100
或
和CAST(result_num as INTEGER)>100
第一次查询会出现什么错误?ORA-01722?这意味着该列中的数据实际上不是一个数字——这就是为什么不应该将其存储为字符串的原因。ORA-12801:并行查询服务器P017中发出错误信号ORA-01722:无效数字12801。00000-“并行查询服务器%s中发出错误信号”*原因:并行查询服务器达到异常条件*措施:检查以下错误消息以了解原因,并查阅错误手册以了解适当的措施*注释:此错误可以通过事件10397关闭,在这种情况下,服务器的实际错误将被通知。然后在result\u num
列中有非数值;不一定在与您的vt\u code
filter匹配的行中,这取决于Oracle评估事物的顺序。您可能首先需要弄清楚它们为什么存在,它们代表什么,以及是否需要修复它们。你可以跳过或容纳它们,但这取决于它们是什么。也许是因为它们有小数点?谢谢你的帮助。不,不是因为它们有小数点,除非你的NLS设置是错误的。显式to_number()
或cast()
可能会起作用,但只能通过更改求值顺序才能起作用,将来可能会再次中断。Convert选项给了我一个ORA-00904错误,表示INT是无效标识符。演员声明似乎奏效了。非常感谢。