iT邦幫忙

0

SQL 查詢只要特定字元數的資料

sql
GJ 2009-07-15 09:47:3612112 瀏覽

資料表裡有個欄位是id
資料是像這樣
09050029-1039
08030036-1256
09050048-3254.25
.
.
請問我要用if 下條件,只要符合xxxxxxxx-xxxx
這13個字元數的都抓出來,有.的超過13字元數都不要(如上面的.25那筆不要輸出)
請問該怎麼寫,用like或是len?

看更多先前的討論...收起先前的討論...
題目是符合xxxxxxxx-xxxx(共13字元)即把資料帶出,若資料超過13字元的不可帶出,也就是要完整等於條件。這用【=】不就OK嗎?
GJ iT邦研究生 5 級 ‧ 2009-07-15 11:13:45 檢舉
我是要帶出一個table內全部符合13字元的id資料
用"="不就只有單筆?
ID是PK?
Where Len(欄位)=13
基本上還是了解一下TABLE比較好
zanhsieh iT邦新手 4 級 ‧ 2009-07-16 23:01:23 檢舉
老實說,mysql 可以這樣搞:
SELECT id FROM yourtablename REGEXP '[0-9]{8}\-[0-9]{4}'


TSQL 要搞 regular expression 可以看這一篇:

http://www.simple-talk.com/sql/t-sql-programming/tsql-regular-expression-workbench/

前提你要有 dbo 權限,然後:

SELECT id FROM yourtablename dbo.RegexMatch('[0-9]{8}\-[0-9]{4}', id)
zanhsieh iT邦新手 4 級 ‧ 2009-07-16 23:06:00 檢舉
阿,最後一行搞錯了:

[code]SELECT id FROM yourtablename WHERE dbo.RegexMatch('[0-9]{8}\-[0-9]{4}', id) <> 0[/code]

微軟也有人寫 regular expression function ,見
[url]http://blogs.msdn.com/khen1234/archive/2005/05/11/416392.aspx[/url]
20
alexc
iT邦高手 1 級 ‧ 2009-07-15 11:51:35
最佳解答
&lt;pre class="c" name="code">select id from 資料表
  where len(id)=13
14
pantc328
iT邦研究生 1 級 ‧ 2009-07-15 11:13:08

SELECT LEFT(id,13) as string FROM TableName

jamesjan iT邦高手 1 級 ‧ 2009-07-15 12:08:18 檢舉

這樣這筆也會輸出喔
09050048-3254.25

14
oxox
iT邦新手 1 級 ‧ 2009-07-15 16:48:29

因不知道資料內容為何,就分享出來的三筆 資料,我會這樣想:
符合xxxxxxxx-xxxx,所以用 substring(id,9,1)='-' 抓出 有 - 的,
又只要 13 不要有 . 所以用 len(id)=13 and not like '%.%'
所以我會這樣下SQL

&lt;pre class="c" name="code">select id from 資料表   
where substring(id,9,1)='-' and len(id)=13 and id not like '%.%'

如果不是很多個 -,下面這樣似乎也可以喔..

&lt;pre class="c" name="code">select id from 資料表   
where id like '%-%' and len(id)=13 and id not like '%.%'
GJ iT邦研究生 5 級 ‧ 2009-07-15 18:55:15 檢舉

TABLE長這樣
ID 日期 樣品
09050029-1039 2009/5/13 N
09050048-3254.25 2009/6/6 L
.
.
N
以ID來SELECT,WHERE條件下有含.的都不要輸出
以字元數(13)下WHERE有想到LEN方式
因為滿多筆的(幾千),所以想問其他寫法
謝謝~以上我都試試

oxox iT邦新手 1 級 ‧ 2009-07-16 09:38:51 檢舉

由您給的資料看起來,雖然在同一個欄位有包含許多資料(這樣真的好用嗎?)
但只要抓前面的資料即可,所以網友的 LEFT(id,13) 就可以了,
這樣速度應該較快...(幾千好像不算多耶,可能我常常在抓的都是幾十萬筆...^^)

oxox iT邦新手 1 級 ‧ 2009-07-16 09:42:55 檢舉

LEFT(id,13) 加上 id not like '%.%' 雖然不是最快,但應該可以...
不然試試看 LEFT(id,13) 加上 substring(id,14,1)<>'.'

12
smallbear
iT邦新手 5 級 ‧ 2009-07-16 12:30:10

以 MS T-SQL 語法, 這樣寫可以達到你的需求

&lt;pre class="c" name="code">
SELECT Id 
  FROM Table
 WHERE Id LIKE '________-____'

另外, 資料筆數多寡必須要從後續運算的複雜度與電腦的運算速度去考量, 如果只是用 SELECT 取出數千筆資料然後顯示出來, 這是非常少的資料量

jamesjan iT邦高手 1 級 ‧ 2009-07-16 12:55:35 檢舉

^^b

我要發表回答

立即登入回答