--在参考范围内 为阴性
SELECT
COUNT(*) Total1
FROM [TABLE_NAME]
WHERE SUBSTRING(text_ref,1,1) BETWEEN '0' AND '9' --参考范围为数字
AND (CASE WHEN (
CONVERT(DECIMAL(10,2),result_value)>= CONVERT(DECIMAL(10,2),SUBSTRING(text_ref,0,CHARINDEX('-',text_ref))) --大于低参考值
AND CONVERT(DECIMAL(10,2),result_value)<=CONVERT(DECIMAL(10,2),SUBSTRING(text_ref,CHARINDEX('-',text_ref)+1,LEN(text_ref)))--小于高参考值
)
THEN '阴性' ELSE '阳性' END )
='阴性'
--参考范围为中文 为阴性
SELECT
COUNT(*) Total2
FROM [TABLE_NAME]
WHERE SUBSTRING(text_ref,1,1) NOT BETWEEN '0' AND '9' --参考范围为数字
--[TABLE_NAME]替换为实际的表名称
result_value是字符串?
select count(*) from TableName where cast(result_value as DECIMAL(18,2)) <数值
result_value最好设置只能存放数值,应该修改代码,不能存字符的内容。。
是字符串这是生产环境的没法改
@独孤求败、横行江湖: 这种设计不合理,应该再加一个字段专门只能存数字,这个老的数据就不管了,以后新的数字只能存在新的字段里
CASE expression
mysql> select (case when age > 0 then 'yang' else 'yin' end) as text_ref from user;
+----------+
| text_ref |
+----------+
| yin |
| yin |
| yin |
| yin |
| yang |
+----------+
5 rows in set (0.00 sec)
加了 as
没想出sql怎么写,
但是能提个思路,把text_ref 0.0-1.0 拆成两个字段,text_ref_min 0.0,text_ref_max 1.0,
查询的时候用 if 判断值是否在text_ref_min,text_ref_max两个字段之间,如还要查出范围的话,这两个字段拼接展示
主要是这俩字段都是string类型有的是文字,有的是文字加数值
需要sql帮写q3303670645
不会只能用sql吧,用其他语言很好解决,程序是什么语言
试用split切割
mysql版本:
SELECT
-- health_report_id,
-- result_value,
-- text_ref
count(1)
FROM
(
SELECT
health_report_id,
result_value,
text_ref,
LEFT ( text_ref, LOCATE( '-', text_ref ) - 1 ) AS left_str,
substring( text_ref, LOCATE( '-', text_ref ) + 1 ) AS right_str
FROM
test_table
WHERE
result_value != '阴性'
) t1
WHERE
CONVERT ( t1.result_value, DECIMAL ) < CONVERT ( t1.left_str, DECIMAL ) OR CONVERT ( t1.result_value, DECIMAL ) > CONVERT ( t1.right_str, DECIMAL );