需要在T-SQL中验证二进制数的值

时间:2019-03-25 16:04:44

标签: sql tsql

这是我的问题。例如,我有一个二进制数字0010010,我只需要验证从左到右的第三个值是1。如何在T-SQL中做到这一点?

-- Addded estimated hours field  

SET @EstHours = (SELECT SUM(ESTHOURS)
FROM LABORMP
WHERE  @PMID = LABORMP.PMID AND ( LEFT(CYCLETYPE,3) = 1 OR LABORMP.CYCLETYPE is null)
)

3 个答案:

答案 0 :(得分:2)

使用substring()获取3d数字并转换为bit,这将返回TrueFalse

declare @binary varchar(8) = '00100010'
select CONVERT(bit, substring(@binary, 3, 1))

返回

True --1

declare @binary varchar(8) = '00000010'
select CONVERT(bit, substring(@binary, 3, 1))

返回

False --0

修改
对于您的查询,您只需要:

...SUBSTRING(CYCLETYPE, 3, 1) = '1' ...

如果CYCLETYPE是字符串。
您查询的逻辑可以这样写:

SET @EstHours = (
  SELECT SUM(ESTHOURS)
  FROM LABORMP
  WHERE  
    @PMID = PMID 
    AND 
    SUBSTRING(COALESCE(CYCLETYPE, '111'), 3, 1) = '1'
)

答案 1 :(得分:1)

如果值是varbinary,则可以使用bitwise and operator (&)

DECLARE @binaryValue varbinary(7) = 0010010;

SELECT 1
WHERE @binaryValue & 0010000 = 0010000

答案 2 :(得分:0)

尝试一下:

SELECT 1
FROM yourtable
WHERE SUBSTRING(yourcolumn, 3, 1) = 1

如果第三位不是1,您将得到一个空结果