具有前三个字符的返回值是字母

时间:2015-04-08 16:37:30

标签: sql db2

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

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

应该返回

        FEN314
        GIB452

这不起作用。    目前还在那里吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

许多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')

答案 1 :(得分:1)

如果你有一个相当新版本的DB2(在10.1 for 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