这是我的问题。例如,我有一个二进制数字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)
)
答案 0 :(得分:2)
使用substring()
获取3d数字并转换为bit
,这将返回True
或False
:
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,您将得到一个空结果