下面是我的查询,我希望提取只有子字符串值(将是 YYYY)小于当前年份 - 25 年的记录......我应该提到这个字段是 varchar 并且可能需要被转换我也没能成功。
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
最佳答案
由于我们不知道您使用的是哪个 RDBMS,我将采用最简单的答案。这假设您使用的是 MSSQL。
使用 ISNUMERIC()函数来确定 SUBSTRING(loandescription,1,4)
实际上是一个数字。如果是,那么您可以在那时对其进行转换/转换并将其与您感兴趣的“年份”进行比较。IE:
...
ProcessDate = (CONVERT(VARCHAR, GETDATE(), 112)-1)) AND
(ISNUMERIC(SUBSTRING(loandescription,1,4)) = 1 AND
CAST(SUBSTRING(loandescription,1,4) AS INT) = (YEAR(GETDATE()) - 25))
由于 bool 短路,如果前 4 个字符不是数字,则不会费心进行比较。相同的规则适用于其他 RDBMS 系统(如 MySQL、PostgreSQL、SQLite 等),但方法可能略有不同。事实上,我认为 MySQL 或 PostgreSQL 甚至没有
ISNUMERIC
函数,这意味着您需要找到其他方式(Regex)进行测试。
关于sql - Where 子句中的子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18362890/