sql - Where 子句中的子串

标签 sql substring varchar

下面是我的查询,我希望提取只有子字符串值(将是 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/

相关文章:

sql - 报表的多连接SQL查询优化

mysql - 如何进行选择为嵌套的查询?

C++ - 获取对字符串子字符串的常量访问

MySQL 按整数对 varchar 进行排序

mysql - 结果按一列分组,并根据第二列的最大值显示不同的行

sql - 操作必须使用可更新的查询 ASP 查询失败

batch-file - 在批处理文件中执行子字符串的最佳方法是什么?

c# - 从长字符串(300 万个字符)中读取大量(100 万)子字符串(100 个字符宽)

c# - 如何使用 OrmLite 固定大小而不是 null varchar?

mysql - 有没有办法在 CREATE TABLE 语句中使用用户定义的变量作为列长度?