我想知道在名爲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]'
但我什麼也沒得到。我究竟做錯了什麼?
我想知道在名爲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]'
但我什麼也沒得到。我究竟做錯了什麼?
這是什麼dbms?有些數據庫不允許在like子句中使用正則表達式只是通配符。如果它的oracle可以爲mysql檢出REGEXP_LIKE或REGEXP。
我會做這樣的事情:
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]')
使用等與正則表達式檢查你仍然可以在範圍索引掃描,如果有一個。
SQL Server支持字符範圍。 – 2010-09-06 22:23:42
謝謝傑夫,很高興知道,我編輯說「有些數據庫不」 – 2010-09-06 22:33:32
這對我在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]'
SQL標準不支持LIKE中的REGEXP。他們有一個更原始的模式語言。您需要添加一個函數或後期過濾器,或者發現一個DBMS特定的擴展。
MySQL允許您使用REGEXP
關鍵字而不是LIKE
的正則表達式。我建議如下代碼:
SELECT *
FROM `fx1rah00`
WHERE `numtso` REGEXP 'WO[0-9]{13}'
你使用的是什麼RDBMS? – 2010-09-06 22:22:34
一些示例數據將有所幫助,以及相關列的數據類型。 – 2010-09-06 22:25:07