Return 具有前三个字符的值是字母

Return values that have first three characters are letters

有没有办法只 return 具有前 3 个值的行是按字母顺序排列的。 像

       Select GUITAR_DESC
       From Prod.INVENTOR
       WHERE LEFT(GUITAR_DESC,3)LIKE('[A-Z]%'

应该return

        FEN314
        GIB452

这行不通。 目前有吗?

谢谢!

许多 SQL 引擎支持 LIKE 子句中的字母范围,因此您可以这样使用它:

Select GUITAR_DESC
From Prod.INVENTOR
WHERE GUITAR_DESC LIKE '[A-Z][A-Z][A-Z]%'

不幸的是,DB2 似乎不支持这个选项。作为解决方法,您可以使用 substr 函数和 BETWEEN 运算符,如下所示:

Select GUITAR_DESC
From Prod.INVENTOR
WHERE (substr(GUITAR_DESC,1,1) BETWEEN 'A' AND 'Z') AND
      (substr(GUITAR_DESC,2,1) BETWEEN 'A' AND 'Z') AND
      (substr(GUITAR_DESC,3,1) BETWEEN 'A' AND 'Z')

如果您有一个相当新的 DB2 版本(在 10.1 z/OS 和 9.7 Linux/Unix/Windows 上测试),您可以将正则表达式与 Xquery 一起使用:

SELECT *
FROM your_table A
WHERE
    XMLCAST(
        XMLQUERY('fn:matches($col, "^[A-Z]")' passing A.your_column AS "col")
    AS INTEGER) = 1