iT邦幫忙

0

想濾掉 尾巴是 英文的 SQL 怎下?

sql
  • 分享至 

  • xImage

問個 SQL 問題
表格A如下
id
6208
1234
625K
631L
632R
633L
634R
635U
A123
想濾掉 尾巴是 英文的 SQL 怎下?
原本這樣下
SELECT * FROM A and id like '[0-9]%'
但只能過濾掉開頭是英文的資料(有點尷尬),我想撈出都是數字的資料

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
純真的人
iT邦大師 1 級 ‧ 2021-07-11 12:12:41
最佳解答

這樣??

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

2
一級屠豬士
iT邦大師 1 級 ‧ 2021-07-11 17:09:12
-- 這是過濾掉有任何英文字母的, 這跟 "全是數字" 意義並不同.
-- 但是在你的資料情況下,這是一種輔助的方式.

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)

謝謝 但我不確定 不是都可以支援你這種語法 感謝回復

3
ckp6250
iT邦好手 1 級 ‧ 2021-07-11 21:28:17

若是 mysql ,

select *
  from tmp
 where id regexp '^[[:digit:]]+$'

我要發表回答

立即登入回答