6
votes

Évaluation de l'expression booléenne SQL Server

J'ai une table qui stocke des données du district d'évaluation du comté. Je veux ajouter une colonne calculée pour me dire si la propriété est occupée par le propriétaire. Je définis le "propriétaire occupé" comme vrai si l'adresse de la propriété est identique à l'adresse du propriétaire, false sinon.

En raison des inexactitudes de saisie des données dans les données source du comté, si je fais une comparaison de texte stricte, je reçois beaucoup de faux résultats non occupés par le propriétaire. Donc, je veux tester "Si le nom de la rue de la propriété n'est pas dans l'adresse du propriétaire, ou si le numéro d'adresse de la propriété n'est pas à l'adresse du propriétaire, il s'agit d'une propriété non occupée par le propriétaire" p>

i a écrit ce qui suit: P>

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


0 commentaires

4 Réponses :


9
votes

expressions ne peut pas retourner true ou false dans SQL Server. (Pas de type booléen) mais vous pouvez déplacer toute l'expression à l'intérieur du quand comme: xxx


0 commentaires

2
votes

Vous ne pouvez pas mettre l'expression booléenne dans une liste de recherche de cas. Contrairement aux langages de type C, dans T-SQL Un Boolean ne peut pas être comparé contre d'autres valeurs. Et le dernier mais non le moindre transact-sql n'a pas vrai et faux.

Vous devez donc déplacer l'expression booléenne dans l'affaire quand code>, qui attend un booléen: p>

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


0 commentaires

2
votes

Je suis venu avec la même chose que Shannon Severance.

Ce code est une colonne calculée appropriée. p>

Testez l'idée avec ce code simple: p>

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


0 commentaires

-1
votes

Essayez ceci:

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


0 commentaires