有一个字段divide
其值是11000000和11010000两条记录
我想通过select查找出头两位是1的,该怎么写sql语句阿
我自己试着写了,但是查出的结果不对:
我是这么写的:
select * from table where divide&11000000=11000000
这样只能查出一条记录阿!
[b]问题补充:[/b]
你说的是什么意思?
按你说的话,速度会很慢的!
最好用位操作!
[b]问题补充:[/b]
刚才查资料也是这么说的,但是怎么把10进制的11000000当成二进制处理呢?
请朋友给个解决方法!谢谢了
问题是sql的位运算不是把11000000当成二进制的数处理,所以你这样写是有问题的
把它转换成字符串再判断呢
sql本身好像没办法没提供这样的函数
你可以先把divide当成二进制串传给下面定义的函数,再和11000000做位运算
一条SQL语句实现二进制到十进制的转换收藏
-- 对象名称: f_bin_to_dec
-- 对象描述: 二进制转换十进制
-- 输入参数: p_str 二进制字符串
-- 返回结果: 十进制字符串
-- 测试用例: SELECT pkg_number_trans.f_bin_to_dec('11110001010') FROM dual;
----------------------------------------------------------------------------------------------------------------------
v_return VARCHAR2(4000);
BEGIN
SELECT SUM(data1) INTO v_return
FROM (SELECT substr(p_str, rownum, 1) * power(2, length(p_str) - rownum) data1
FROM dual
CONNECT BY rownum <= length(p_str));
RETURN v_return;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END f_bin_to_dec; FUNCTION f_bin_to_hex(p_str IN VARCHAR2) RETURN VARCHAR2 IS
FUNCTION f_bin_to_hex(p_str IN VARCHAR) RETURN VARCHAR IS
v_return VARCHAR(4000);
BEGIN
SELECT SUM(data1) INTO v_return
FROM (SELECT substring(p_str, rownum, 1) * power(2, length(p_str) - rownum) data1
FROM dual
CONNECT BY rownum <= length(p_str));
RETURN v_return;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END f_bin_to_dec;