2009-05-20 8 views
0

J'ai une table disons T dans la base de données SQL Server 2005 et il a deux colonnes dites A et B, qui le plus souvent n'auront aucune valeur en eux. Comment vérifier si A et B sont vides (toutes les chaînes de longueur nulle) ou non?De meilleurs moyens de déterminer si une colonne d'une table est vide ou non?

J'ai cette façon naïve de le faire -

select count(*) as A_count from T where A <> '' 

Supposons que A a varchar de type de données. Je me demandais si je pouvais obtenir la même information en utilisant une table système, et si oui, cela serait-il plus rapide que cette requête?

acclamations

+0

Dommage que vous n'utilisiez pas Oracle - Les index Bitmap sont parfaits pour ce genre de choses. – RichardOD

Répondre

0

Si votre colonne est annulable, vous devrez modifier votre requête comme suit:

select count (*) comme A_count de T où COALESCE (A, '') <> ''

autrement vous ne compterez pas les valeurs nulles.

2

Votre méthode est essentiellement correcte, bien que le libellé de votre question est imprécise. Est-ce que vide inclut NULL ou une chaîne vide de longueur non nulle?

Vous pouvez gérer ces cas avec:

select count(*) as A_count from T where isnull(rtrim(ltrim(A)), '') <> '' 

Aussi, assurez-vous qu'il ya un index sur la colonne A.

0

Si nous parlons de chaînes de longueur nulle, alors c'est la façon dont Je le ferais:

select count(*) as A_count from T where LEN(A) > 0 

Gardez à l'esprit cependant que si A pourrait être nul, ces lignes ne seront pas pris par l'une LEN (A)> 0 ou LEN (A) = 0, et que vous devra envelopper un I SNULL autour de A dans ce cas.

Questions connexes