不好意思,我没看懂你的意思。 我现在是 select * where 某字段 <> '0000 0100' from table 请问要如何写呢?
不大懂你的意思 varchar(1)怎么可以装8位呢 要是数据只有一个字符串 直接 select * from tb where col = '1'
select * from table A where 某字段 not in( '0000 0100','0000 0001') 某字段 varchar(1)
先建一个转二进制的自定义函数(可惜我不会写,嘿嘿),函数符合你要求的输出格式。然后 select * from table A where dbo.函数(某字段) not in( '0000 0100','0000 0001')
--仅供参考--1:十進制轉換N進制 CREATE function IntToNCarry(@iValue int,@iCarryNo int) returns varchar(100) as begin declare @iPos int ,@vCarryNo varchar(100) set @vCarryNo= ' ' while(@iValue> =@iCarryNo) begin set @iPos=@iValue%@iCarryNo set @vCarryNo=@vCarryNo+cast(@iPos as varchar) set @iValue=@iValue/@iCarryNo end set @vCarryNo=@vCarryNo+cast(@iValue as varchar) return reverse(@vCarryNo) end go
既然这个字段是char(1)类型,只有8bits,如下条件即可: WHERE CAST(CAST(ch AS binary(1)) AS tinyint) & 0x05 = 0 示例:WITH SampleTable AS( SELECT ch = CHAR(n + 64) FROM Nums WHERE n <= 16 ) SELECT ch, bin = CAST(ch AS binary(1)) FROM SampleTable WHERE CAST(CAST(ch AS binary(1)) AS tinyint) & 0x05 = 0
select * from tb where 字段&4=4 or 字段&1=1 饿,我乱写的而且字段必须是int型
我的具体查询语句是SELECT SNO, COUNT(sht) AS CNT FROM SampleTable WHERE SNAME="HE" and CAST(CAST(FLG AS binary(1)) AS tinyint) & 0x05 = 0 GROUP BY SNO;其中FLG为 char(1),即8个bits 这样子后报错,提示:SQL0007N 跟在 "nary(1)) AS tinyint)" 之后的字符 "&" 无效。 SQLSTATE=42601 我用的是DB2
不好意思,重发,刚才的没编辑好 我的具体查询语句是SELECT SNO, COUNT(sht) AS CNT FROM SampleTable WHERE SNAME="HE" and CAST(CAST(FLG AS binary(1)) AS tinyint) & 0x05 = 0 GROUP BY SNO;其中FLG为 char(1),即8个bits 这样子后报错,提示:SQL0007N 跟在 "nary(1)) AS tinyint)" 之后的字符 "&" 无效。 SQLSTATE=42601 我用的是DB2
--0100--4
/*
-----------
4(所影响的行数为 1 行)
/
不好意思,我没看懂你的意思。
我现在是 select * where 某字段 <> '0000 0100' from table
请问要如何写呢?
varchar(1)怎么可以装8位呢
要是数据只有一个字符串
直接
select * from tb where col = '1'
select * from table A
where 某字段 not in( '0000 0100','0000 0001') 某字段 varchar(1)
select * from table A
where dbo.函数(某字段) not in( '0000 0100','0000 0001')
--仅供参考--1:十進制轉換N進制
CREATE function IntToNCarry(@iValue int,@iCarryNo int)
returns varchar(100)
as
begin
declare @iPos int
,@vCarryNo varchar(100) set @vCarryNo= ' ' while(@iValue> =@iCarryNo)
begin
set @iPos=@iValue%@iCarryNo
set @vCarryNo=@vCarryNo+cast(@iPos as varchar)
set @iValue=@iValue/@iCarryNo
end
set @vCarryNo=@vCarryNo+cast(@iValue as varchar)
return reverse(@vCarryNo)
end
go
sht_ID flg
'DMYY105U006N00 1' 6
'DMYY105U006N00 2' '>'
'DMYY105U007N00 9' 2
'DMYY105U007N00 A' '~'
'DMYY105U008N00 9' 2
'DMYY105U008N00 A' 2sht_id character(20)
flg character(1)flag初始化为 '0',即 '0011 0000'
flag栏位的结果是通过二进制 '位运算' 得出的结果 ,所以我不想去按照字符来做select,而是也通过‘位’的选择去筛选
我现在要做的筛选是,只要 '---- -1--'和 '---- ---1'这两种情况,那么就要被去除掉
谢谢~
1.数据库是不是Mssql?
2.flag初始化为0,二进制怎么就是00110000了
3.你要查哪列,请把那一列转成二进制,你给的数据我怎么也看不出二进制在哪?
4.针对查询规则给出你查到的结果
既然这个字段是char(1)类型,只有8bits,如下条件即可:
WHERE CAST(CAST(ch AS binary(1)) AS tinyint) & 0x05 = 0
示例:WITH SampleTable AS(
SELECT ch = CHAR(n + 64)
FROM Nums
WHERE n <= 16
)
SELECT ch, bin = CAST(ch AS binary(1))
FROM SampleTable
WHERE CAST(CAST(ch AS binary(1)) AS tinyint) & 0x05 = 0
饿,我乱写的而且字段必须是int型
我的具体查询语句是SELECT SNO, COUNT(sht) AS CNT
FROM SampleTable
WHERE SNAME="HE" and CAST(CAST(FLG AS binary(1)) AS tinyint) & 0x05 = 0
GROUP BY SNO;其中FLG为 char(1),即8个bits
这样子后报错,提示:SQL0007N 跟在 "nary(1)) AS tinyint)" 之后的字符 "&" 无效。 SQLSTATE=42601
我用的是DB2
我的具体查询语句是SELECT SNO, COUNT(sht) AS CNT
FROM SampleTable
WHERE SNAME="HE" and CAST(CAST(FLG AS binary(1)) AS tinyint) & 0x05 = 0
GROUP BY SNO;其中FLG为 char(1),即8个bits
这样子后报错,提示:SQL0007N 跟在 "nary(1)) AS tinyint)" 之后的字符 "&" 无效。 SQLSTATE=42601
我用的是DB2
我用的是DB2
我用的是DB2瀑布汗|||DB2没用过。LZ可参考如下思路:1. DB2的什么数据类型支持位运算。
2. 怎么把char(1)转换成第1条的数据类型。
2. 字符'0',bin即为 ‘0011 0000’
3. flg这一列,在表中是以字符形式显示的,而显示的这些字符,是通过 二进制的与或运算 得出的
4. #18 feilniu 兄的回复
不是业务问题。是因为SQLServer不支持binary类型的位运算。
SQL标准当然是一致的。问题有二:
1. 每种SQL方言都对SQL标准进行了扩展;
2. 数据类型、运算符、系统函数都依赖特定的DBMS平台。