iT邦幫忙

4

玩玩SQL,大家可以試試看,找出異常字串

最近好像沒SQL可以玩了..

出個題目~

假設資料如下:

declare @tab table(
	資料 nvarchar(50)
)

insert into @tab
values('test')
,('我們')
,('0101010101')
,('0123456789')
,('^^^^')
,('Run IT')
,('94987!')

https://ithelp.ithome.com.tw/upload/images/20181004/20061369593OByQRQI.png

我想找出非英文及非數字的資料
如下
https://ithelp.ithome.com.tw/upload/images/20181004/20061369kJuZFCNjy9.png

各位會如何下SQL查詢??

我之後再貼答案@@...


參考:用正則表示式就可以抓到資料囉,可以用LIKE或PATINDEX來抓異常資料。

select * 
from @tab 
where 資料 like '%[^a-z0-9]%'

https://docs.microsoft.com/zh-tw/sql/t-sql/language-elements/like-transact-sql?view=sql-server-2017

select *
,PatIndex('%[^a-z0-9]%',資料) as 異常位置
from @tab
where PatIndex('%[^a-z0-9]%',資料) > 0

https://ithelp.ithome.com.tw/upload/images/20181004/20061369S0zxYNNFf6.png
https://docs.microsoft.com/zh-tw/sql/t-sql/functions/patindex-transact-sql?view=sql-server-2017

pcw iT邦研究生 3 級 ‧ 2018-10-04 18:43:36 檢舉
Run IT
不是英文嗎?
因為中間有空格

1 個回答

5
暐翰
iT邦大師 3 級 ‧ 2018-10-04 17:02:26
最佳解答

第一想法,經典正則[^a-zA-Z0-9]

declare @tab table(
	資料 nvarchar(50)
)

insert into @tab
values('test')
,(N'我們')
,('0101010101')
,('0123456789')
,('^^^^')
,('Run IT')
,('94987!')

select * from @tab
where 資料 LIKE  '%[^a-zA-Z0-9]%'

結果:

資料
--------------------------------------------------
我們
^^^^
Run IT
94987!
看更多先前的回應...收起先前的回應...

哈~正確~~

暐翰 iT邦大師 3 級 ‧ 2018-10-04 18:13:32 檢舉

/images/emoticon/emoticon12.gif

從來沒在SQL上用過正規/images/emoticon/emoticon16.gif

尼克 iT邦高手 1 級 ‧ 2018-10-05 13:46:22 檢舉

我也沒用過!汗顏

Homura iT邦研究生 1 級 ‧ 2018-10-08 16:14:54 檢舉

沒用過+1/images/emoticon/emoticon06.gif

我要發表回答

立即登入回答