Sous-chaîne dans la clause where
Ci-dessous est ma requête, je suis à la recherche de tirer les enregistrements où seule la sous-chaîne de la valeur (qui sera AAAA) est le moins que l'année en cours, - de 25 ans.... et je dois mentionner que ce champ est de type varchar et probablement doit être converti en qui je n'ai pas été capable de le faire avec succès.
SELECT
AccountNumber,
LoanPrimeLongName,
convert (varchar,LoanOpenDate,103)LoanOpenDate,
LoanOriginalBalance,
LoanBalance,
LoanInterestRate,
LoanRemainingTermMonths,
LoanDelqDays,
LoanDescription
FROM
ARCU.ARCULoanDetailed
WHERE
(((LOANTYPE = '15' OR
LOANTYPE = '16' OR
LoanType = '17') AND
LoanStatus = 'Open') AND
ProcessDate = (CONVERT(VARCHAR, GETDATE(), 112)-1)) AND
(SUBSTRING (loandescription,1,4) not like '%[^0-9]%')
ORDER BY AccountNumber
Je suis nouveau à cela, vous ne savez pas comment poster une requête en meilleur format
Sélectionnez le texte, puis appuyez sur la
Sélectionnez le texte, puis appuyez sur la
{}
bouton, ou sur ctrl+k
.
OriginalL'auteur villiec | 2013-08-21
Vous devez vous connecter pour publier un commentaire.
Puisque nous ne savons pas qui SGBD que vous utilisez, je vais choisir la réponse la plus simple. Cela suppose que vous êtes à l'aide de MSSQL.
Utiliser le ISNUMERIC() fonction pour déterminer si
SUBSTRING(loandescription,1,4)
est en fait un certain nombre. Si c'est le cas, vous pouvez convertir/convertir à ce point et de le comparer à "l'année" qui vous intéresse. C'est à dire:En raison de booléens de court-circuit, si les 4 premiers caractères ne SONT PAS numériques, alors qu'il ne dérange pas de casting pour comparer. La même règle s'applique à d'autres systèmes SGBDR (comme MySQL, PostgreSQL, SQLite, etc), mais les méthodes pourrait être un peu différente. En fait, je ne pense pas que MySQL ou PostgreSQL même le
ISNUMERIC
fonction, ce qui signifie que vous besoin de trouver d'autres moyens (Regex) pour tester.ISNUMERIC
) dans unCASE WHEN
expression conditionnelle, puis masquer l'utilisation (CAST
) dans sonTHEN
clause pour être sûr.OriginalL'auteur SPFiredrake
En supposant que votre "AAAA" le terrain est
(SUBSTRING (loandescription,1,4) not like '%[^0-9]%')
:Vous avez besoin de la
CASE
énoncé, puisque l'année n'est pas toujours peuplé, et les valeurs de texte neCAST
commeINT
. Ensuite, vous utilisez laGETDATE()
de la fonction en collaboration avecDATEADD()
à ajouter dans vos 25 ans.Ah, donc il semble que le problème, c'est que votre année n'est pas toujours remplie. Voir mise à jour.
OriginalL'auteur Hart CO