2010-09-06 91 views
1

我想知道在名爲NUMTSO的列中是否存在具有這種格式的數據「WO #############」,所以我現在所做的是:使用LIKE的SQL語句

select * 
from fx1rah00 
where numtso like 'WO[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' 

但我什麼也沒得到。我究竟做錯了什麼?

+5

你使用的是什麼RDBMS? – 2010-09-06 22:22:34

+3

一些示例數據將有所幫助,以及相關列的數據類型。 – 2010-09-06 22:25:07

回答

0

這是什麼dbms?有些數據庫不允許在like子句中使用正則表達式只是通配符。如果它的oracle可以爲mysql檢出REGEXP_LIKEREGEXP

我會做這樣的事情:

where NUMTSO like 'WO%' 
and REGEXP_LIKE(NUMTSO, 'WO[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') 

使用等與正則表達式檢查你仍然可以在範圍索引掃描,如果有一個。

+0

SQL Server支持字符範圍。 – 2010-09-06 22:23:42

+0

謝謝傑夫,很高興知道,我編輯說「有些數據庫不」 – 2010-09-06 22:33:32

1

這對我在SQL Server中正常工作。如果您不使用SQL Server,則可能需要一些不同的語法,因爲模式語法不是標準SQL。

;with fx1rah00 As 
(
select 'WO1234567890123' as numtso 
) 
select * 
from fx1rah00 
where numtso like 
      'WO[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' 
0

SQL標準不支持LIKE中的REGEXP。他們有一個更原始的模式語言。您需要添加一個函數或後期過濾器,或者發現一個DBMS特定的擴展。

1

MySQL允許您使用REGEXP關鍵字而不是LIKE的正則表達式。我建議如下代碼:

SELECT * 
    FROM `fx1rah00` 
WHERE `numtso` REGEXP 'WO[0-9]{13}'