Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server布尔表达式求值_Sql_Sql Server_Sql Server 2005_Tsql - Fatal编程技术网

SQL Server布尔表达式求值

SQL Server布尔表达式求值,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,我有一个存储县评估区数据的表。我想添加一个计算列来告诉我该属性是否为所有者占用。如果物业地址与业主地址相同,我将“业主占用”定义为true,否则为false 由于来自该县的源数据中的数据输入不准确,如果我进行严格的文本比较,我会得到很多虚假的非所有者占用结果。所以我想测试“如果物业的街道名称不在业主地址中,或者如果物业的地址号不在业主地址中,那么这是一个非业主占用的物业” 我写了以下内容: alter table appriasaldata add IsOwnerOccupied as

我有一个存储县评估区数据的表。我想添加一个计算列来告诉我该属性是否为所有者占用。如果物业地址与业主地址相同,我将“业主占用”定义为true,否则为false

由于来自该县的源数据中的数据输入不准确,如果我进行严格的文本比较,我会得到很多虚假的非所有者占用结果。所以我想测试“如果物业的街道名称不在业主地址中,或者如果物业的地址号不在业主地址中,那么这是一个非业主占用的物业”

我写了以下内容:

alter table appriasaldata add IsOwnerOccupied as case ((charindex(locastreetnumber, owneraddress) = 0) or (charindex(locastreetname, owneraddress) = 0)) when TRUE THEN 1 ELSE 0 end alter table APPLIASALDATA add 同属 案例 ((charindex(locastreetnumber,owneraddress)=0)或(charindex(locastreetname,owneraddress)=0)) 如果为TRUE,则为1,否则为0 结束
SQL Server不喜欢CHARINDEX函数后面的=符号。如何将其重写为SQL Server可以接受?(如果有必要,我使用的是SQL Server 2005。)

表达式在SQL Server中不能返回true或false。(无布尔类型),但可以在
中移动整个表达式,如:

alter table appriasaldata add 
    IsOwnerOccupied as 
     case when ((charindex(locastreetnumber, owneraddress) = 0) 
          or (charindex(locastreetname, owneraddress) = 0))
        THEN 1 ELSE 0
     end

不能将布尔表达式放入案例查找列表中。与C类型语言不同,在T-SQL中,布尔值不能与其他值进行比较。最后但并非最不重要的一点是,Transact-SQL没有TRUE和FALSE

因此,您需要在
时将布尔表达式移动到大小写
,该大小写应为布尔值:

alter table appriasaldata add 
    IsOwnerOccupied as 
     case when
        (charindex(locastreetnumber, owneraddress) = 0) 
       or (charindex(locastreetname, owneraddress) = 0)
         THEN 1 ELSE 0
     end

我提出了和Shannon遣散费一样的想法

该代码是正确的计算列

使用以下简单代码测试此想法:

DECLARE @appriasaldata TABLE (
    owneraddress        varchar(100),
    locastreetnumber    varchar(100),
    locastreetname      varchar(100)
)

INSERT INTO @appriasaldata (
    owneraddress,
    locastreetnumber,
    locastreetname
)
VALUES (
    '2701 SW Vaughn Street, Portland, OR',
    '2701',
    'SW Vaughn Street'
)

SELECT
    owneraddress,
    locastreetnumber,
    locastreetname,
    charindex(locastreetnumber, owneraddress),
    charindex(locastreetname,   owneraddress),
    CASE
        WHEN charindex(locastreetnumber, owneraddress) <> 0
          or charindex(locastreetname,   owneraddress) <> 0
        THEN 1
        ELSE 0
    END
FROM @appriasaldata
DECLARE@appriasaldata表(
所有者地址varchar(100),
locastreetnumber varchar(100),
locastreetname varchar(100)
)
插入@ApprialData(
所有者地址,
locastreetnumber,
locastreetname
)
价值观(
“波特兰沃恩街西南2701号,或”,
'2701',
“西南沃恩街”
)
挑选
所有者地址,
locastreetnumber,
locastreetname,
charindex(本地电话号码、所有者地址),
charindex(地址、所有者地址),
案例
当charindex(locastreetnumber,owneraddress)为0时
或charindex(locastreetname,owneraddress)0
那么1
其他0
结束
来自@appriaaldata
试试这个:

SELECT
    owneraddress,
    locastreetnumber,
    locastreetname,
    charindex(locastreetnumber, owneraddress),
    charindex(locastreetname,   owneraddress),
    CASE
        WHEN charindex(locastreetnumber,
                       owneraddress)
            +charindex(locastreetname,
                       owneraddress)    > 0
        THEN 1
        ELSE 0
    END
FROM @appriasaldata