有没有办法只返回前3个值是按字母顺序排列的行。 像
这样的东西 Select GUITAR_DESC
From Prod.INVENTOR
WHERE LEFT(GUITAR_DESC,3)LIKE('[A-Z]%'
应该返回
FEN314
GIB452
这不起作用。 目前还在那里吗?
谢谢!
答案 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