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