問個 SQL 問題
表格A如下
id
6208
1234
625K
631L
632R
633L
634R
635U
A123
想濾掉 尾巴是 英文的 SQL 怎下?
原本這樣下
SELECT * FROM A and id like '[0-9]%'
但只能過濾掉開頭是英文的資料(有點尷尬),我想撈出都是數字的資料
這樣??
SELECT * FROM Tmp where PATINDEX('%[^0-9]%',StrTmp) = 0
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=326e20b87db50203a4ff5bff2694d139
或是這樣?
SELECT * FROM Tmp where StrTmp not like '%[^0-9]%'
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=d9788be5732bd21c2ec7a7c833c79c4c
SELECT * FROM Tmp where StrTmp not like '%[^0-9]%' 這個居然 ABCD 這種 也可過濾 跟我想像不一樣
正規化用法咩@@~
從字串中[^0-9]找出不是數字的文字~
再用not like的相反~那麼該字串就是純數字了~
也有純數字的函數~直接找也是有的@@~
SELECT * FROM Tmp where isNumeric(StrTmp) = 1
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=6e1f0844f26058b2f0b5860e99a0b97c
-- 這是過濾掉有任何英文字母的, 這跟 "全是數字" 意義並不同.
-- 但是在你的資料情況下,這是一種輔助的方式.
create table it210711 (
val text
);
insert into it210711 values
('6208'),('1234'),('625K'),
('631L'),('632R'),('633L'),
('634R'),('635U'),('A123');
select val
from it210711
where val !~ any(array['[a-zA-Z]']);
val
------
6208
1234
(2 rows)
-- 這是找4個數字
select val
from it210711
where val ~ '\d{4}';
val
------
6208
1234
(2 rows)
-- 這是 \D 是有任何一個非數字, ! 是not, 組合起來就是全部是數字
select val
from it210711
where val !~ '\D';
val
------
6208
1234
(2 rows)
若是 mysql ,
select *
from tmp
where id regexp '^[[:digit:]]+$'