2015-04-08 3 views
0

Есть ли способ вернуть строки, у которых первые 3 значения являются алфавитными. Что-то вродеВозвращаемые значения, которые имеют первые три символа, являются буквами

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

Если вернуться

 FEN314 
     GIB452 

Это не работает. В настоящее время существует?

Спасибо!

+0

вы также можете использовать [Fn: матчи] (http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.xml .doc/doc/xqrfnmat.html) – jfun

+0

Можете ли вы привести мне пример? Не совсем уверен, что это. – Sewder

ответ

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') 
+0

хм это не сработало. Имеет ли значение, является ли Guitar_Desc типом CHAR? – Sewder

+0

@Sewder Вы правы, похоже, что у DB2 есть некоторые опции, которые не поддерживаются. Я обновил ответ – dotnetom

+0

Большое вам спасибо! – Sewder

1

Если у вас есть довольно новая версия DB2 (проверено на 10.1 для г/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 
Смежные вопросы