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
有没有办法只 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