資料表裡有個欄位是id
資料是像這樣
09050029-1039
08030036-1256
09050048-3254.25
.
.
請問我要用if 下條件,只要符合xxxxxxxx-xxxx
這13個字元數的都抓出來,有.的超過13字元數都不要(如上面的.25那筆不要輸出)
請問該怎麼寫,用like或是len?
SELECT id FROM yourtablename REGEXP '[0-9]{8}\-[0-9]{4}'
SELECT id FROM yourtablename dbo.RegexMatch('[0-9]{8}\-[0-9]{4}', id)
SELECT LEFT(id,13) as string FROM TableName
因不知道資料內容為何,就分享出來的三筆 資料,我會這樣想:
符合xxxxxxxx-xxxx,所以用 substring(id,9,1)='-' 抓出 有 - 的,
又只要 13 不要有 . 所以用 len(id)=13 and not like '%.%'
所以我會這樣下SQL
<pre class="c" name="code">select id from 資料表
where substring(id,9,1)='-' and len(id)=13 and id not like '%.%'
如果不是很多個 -,下面這樣似乎也可以喔..
<pre class="c" name="code">select id from 資料表
where id like '%-%' and len(id)=13 and id not like '%.%'
TABLE長這樣
ID 日期 樣品
09050029-1039 2009/5/13 N
09050048-3254.25 2009/6/6 L
.
.
N
以ID來SELECT,WHERE條件下有含.的都不要輸出
以字元數(13)下WHERE有想到LEN方式
因為滿多筆的(幾千),所以想問其他寫法
謝謝~以上我都試試
由您給的資料看起來,雖然在同一個欄位有包含許多資料(這樣真的好用嗎?)
但只要抓前面的資料即可,所以網友的 LEFT(id,13) 就可以了,
這樣速度應該較快...(幾千好像不算多耶,可能我常常在抓的都是幾十萬筆...^^)
LEFT(id,13) 加上 id not like '%.%' 雖然不是最快,但應該可以...
不然試試看 LEFT(id,13) 加上 substring(id,14,1)<>'.'
以 MS T-SQL 語法, 這樣寫可以達到你的需求
<pre class="c" name="code">
SELECT Id
FROM Table
WHERE Id LIKE '________-____'
另外, 資料筆數多寡必須要從後續運算的複雜度與電腦的運算速度去考量, 如果只是用 SELECT 取出數千筆資料然後顯示出來, 這是非常少的資料量