0
votes

Étui postgreSQL quand avec opérateur renvoie null rang

J'essaie de générer la valeur de la période de paie basée sur la date actuelle. Lorsque j'ai couru la requête ci-dessous, il retourne une période de paie correcte, mais j'ai eu une rangée null supplémentaire. Comment puis-je me débarrasser de Null Row? XXX PRE>

Retourne actuellement: P>

1 null
2 18


1 commentaires

Non liée, mais: jamais Valeurs de la date de stockage dans un varchar (ou texte ). Utilisez toujours une date de la colonne . Et pourquoi stockez-vous des chiffres dans une colonne Varchar aussi? Ce sont deux très mauvais choix de conception.


3 Réponses :


0
votes

Déplacez le boîtier logique sur un où clause: xxx

i supprimé le sélectionnez distinct . Vous n'avez pas d'échantillons de vos données, il n'est donc pas clair si cela est nécessaire. Si vous pouvez l'ajouter à.

Notez que vous devez stocker des dates à l'aide d'un type de données de date / heure appropriés, pas comme des chaînes. Si vous avez fait cela, l'étape de conversion serait inutile.


0 commentaires

0
votes

Vous devez utiliser un où conditionner les lignes filtrantes: xxx

aussi, il n'a pas de sens de faire correspondre les cordes vides simplement pour les remplacer par des chaînes vides Encore une fois, j'ai changé * sur + dans votre regex.


1 commentaires

Merci pour votre point sur Regexp. Je ne voulais pas utiliser où, mais je vais utiliser votre solution. Votre réponse résout mon problème.



0
votes

Dans votre requête, vous définissez uniquement le cas pour les enregistrements appartenant à- xxx pré>

En conséquence, tous les enregistrements hors de cette plage de date renvoient null comme vous ne définissez rien de quoi La date est hors de cette gamme. Vous pouvez définir une autre partie pour l'enregistrement en dehors de cette plage de date. Le script peut être aussi ci-dessous - p> xxx pré>

si vous ajoutez la condition de filtrage de la date dans la clause, le script doit être aussi ci-dessous - P>

SELECT 
DISTINCT CAST(regexp_replace(itc_pp, '[^0-9]*', '', 'g') AS INTEGER) - 1 current_pp       
FROM actacc.payperiod_conversion_all_years
WHERE current_date >= to_date(begin_payperiod_date, 'mm/dd/yy')
AND current_date < to_date(end_payperiod_date, 'mm/dd/yy'); 


2 commentaires

Mon exigence est juste de renvoyer les rangées qui répond à la condition. Je ne pense pas que je puisse utiliser étui et "ne rien faire" (sautez les rangées si NULL) en autre. Je suppose que je dois utiliser où


Oui, utilisez ensuite où et ce cas, aucune utilisation n'est nécessaire.