討論區快速選單
知識庫快速選單
網路投保旅行平安險 政府補助!學嵌入式+物聯網 傑米的攝影旅遊筆記
[ 回上頁 ] [ 討論區發言規則 ]
請教字串函數查詢
更改我的閱讀文章字型大小
作者 : evid(璃)
[ 貼文 8 | 人氣 1524 | 評價 0 | 評價/貼文 0 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/25 上午 10:41:20
假設我有幾筆資料
name(欄位名稱)

李曉明
王大為
江小玲_離職
許大淨
======================
我想查詢的結果要如下:

李曉明
王大為
江小玲
許大淨

也就是如果值有'_'符號,其之後(包括'_')的字串皆刪除


請問語法如何下,謝謝
作者 : iamdragon(入世未深) 人氣指數超過10000點
[ 貼文 118 | 人氣 14158 | 評價 210 | 評價/貼文 1.78 | 送出評價 37 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/25 上午 11:00:10
assume your table name is "A"

delete from A where name like"%_離職"
這樣就可以
作者 : evid(璃)
[ 貼文 8 | 人氣 1524 | 評價 0 | 評價/貼文 0 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/25 上午 11:13:23
抱歉,我說詳細一點

我先用SQL語法查詢name欄位
select name from sys_user,frm_in where sys_user.id=frm_in.ChargeName

查詢如下:
name(欄位名稱)

李曉明
王大為
江小玲_離職
陳小華_調職
許大淨
======================
我想查詢的結果要變成:

李曉明
王大為
江小玲
陳小華
許大淨

也就是如果值有'_'符號,其之後(包括'_')的字串皆刪除


請問原本語法需改成如何,謝謝唷
作者 : daviwang(凡人)
[ 貼文 84 | 人氣 5 | 評價 550 | 評價/貼文 6.55 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人evid註記此篇回應為很有道理 2005/2/25 上午 11:36:37

若名字皆為三個中文字的話可用下列方式處理,
若有時為二個或三個中文字的話再用where分開處理再union all起來即可!!
select substr(name,1,3)
from sys_user,frm_in where sys_user.id=frm_in.ChargeName
作者 : evid(璃)
[ 貼文 8 | 人氣 1524 | 評價 0 | 評價/貼文 0 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/25 下午 12:39:08

>若名字皆為三個中文字的話可用下列方式處理,
>若有時為二個或三個中文字的話再用where分開處理再union all起來即可!!
>select substr(name,1,3)
>from sys_user,frm_in where sys_user.id=frm_in.ChargeName

請問~~
有沒有語法是判別'_'這字元
然後再從這字元後的所有字截掉嗎?
謝謝
作者 : daviwang(凡人)
[ 貼文 84 | 人氣 5 | 評價 550 | 評價/貼文 6.55 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人evid註記此篇回應為很有道理 2005/2/25 下午 12:54:50


>請問~~
>有沒有語法是判別''_''這字元
>然後再從這字元後的所有字截掉嗎?
>謝謝

呵...本想愉懶的~~~
好吧...就像這樣寫囉^^(我是用Oracle R8)
select substr(name,1,length(name)-instr(name,'_',1)+1)
from sys_user,frm_in where sys_user.id=frm_in.ChargeName;
作者 : aaaaaaaa(路人) SQL Language優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 271 | 人氣 11161 | 評價 1760 | 評價/貼文 6.49 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/25 下午 01:06:03
ms-sql
找出有符合字串'_',回傳數值再減1,即是連'_'也不取
PATINDEX可判斷是否有要查詢之字串(有回傳1沒有0)

select case when PATINDEX('%_%',name) > 0
then substring(name,1,CHARINDEX('_',name,0)-1)
else name end as name
from sys_user,frm_in
where sys_user.id=frm_in.ChargeName
作者 : evid(璃)
[ 貼文 8 | 人氣 1524 | 評價 0 | 評價/貼文 0 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/25 下午 01:16:33

>>請問~~
>>有沒有語法是判別''''_''''這字元
>>然後再從這字元後的所有字截掉嗎?
>>謝謝
>
>呵...本想愉懶的~~~
>好吧...就像這樣寫囉^^(我是用Oracle R8)
>select substr(name,1,length(name)-instr(name,''_'',1)+1)
>from sys_user,frm_in where sys_user.id=frm_in.ChargeName;

沒錯^^要的語法類似這樣
不過可以給我sql的嗎?
因為sql無法識別 length函數名稱
謝謝
作者 : daviwang(凡人)
[ 貼文 84 | 人氣 5 | 評價 550 | 評價/貼文 6.55 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人evid註記此篇回應為很有道理 2005/2/25 下午 02:07:48
length是Oracle R8內建的函數,
Oracle R8內建的函數sql不好找出來....
不知您用的是何DB...理應有內建如Oracle R8內建的 length函數一樣...

>沒錯^^要的語法類似這樣
>不過可以給我sql的嗎?
>因為sql無法識別 length函數名稱
>謝謝
作者 : loveorc2003(BK.) Visual Basic優秀好手新手入門優秀好手一般優秀好手貼文超過1000則人氣指數超過200000點
[ 貼文 1381 | 人氣 206151 | 評價 2670 | 評價/貼文 1.93 | 送出評價 712 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人evid註記此篇回應為很有道理 2005/2/25 下午 02:21:20
試試把length()改成len()

>
>>>請問~~
>>>有沒有語法是判別''''''''_''''''''這字元
>>>然後再從這字元後的所有字截掉嗎?
>>>謝謝
>>
>>呵...本想愉懶的~~~
>>好吧...就像這樣寫囉^^(我是用Oracle R8)
>>select substr(name,1,length(name)-instr(name,''''_'''',1)+1)
>>from sys_user,frm_in where sys_user.id=frm_in.ChargeName;
>
>沒錯^^要的語法類似這樣
>不過可以給我sql的嗎?
>因為sql無法識別 length函數名稱
>謝謝
作者 : evid(璃)
[ 貼文 8 | 人氣 1524 | 評價 0 | 評價/貼文 0 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/25 下午 02:24:26

>length是Oracle R8內建的函數,
>Oracle R8內建的函數sql不好找出來....
>不知您用的是何DB...理應有內建如Oracle R8內建的 length函數一樣...
>

改成len沒問題ㄌ

不過instr我就不知道對應的是什麼??

喔,我使用SQL2000
作者 : daviwang(凡人)
[ 貼文 84 | 人氣 5 | 評價 550 | 評價/貼文 6.55 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/25 下午 02:38:23
SQL2000...不是粉熟耶^^|||
instr(name,'_',1)-->name中'_'這個字串第一次出現的位置
作者 : loveorc2003(BK.) Visual Basic優秀好手新手入門優秀好手一般優秀好手貼文超過1000則人氣指數超過200000點
[ 貼文 1381 | 人氣 206151 | 評價 2670 | 評價/貼文 1.93 | 送出評價 712 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/25 下午 02:40:43
在微軟的VB,還有ACCESS......的Instr()是
語法:D=Instr(A,B,C)
1.A通常是1,因要從第一個開始
2.B是你要搜尋的字串
3.C是你想要從B中搜尋哪一個字
4.D是傳回值,如果傳回0代表沒有在B的字串中找到C,如果找到了就會傳回在C在B中的第幾個字元出現
5.祝你好運

>
>>length是Oracle R8內建的函數,
>>Oracle R8內建的函數sql不好找出來....
>>不知您用的是何DB...理應有內建如Oracle R8內建的 length函數一樣...
>>
>
>改成len沒問題ㄌ
>
>不過instr我就不知道對應的是什麼??
>
>喔,我使用SQL2000
作者 : evid(璃)
[ 貼文 8 | 人氣 1524 | 評價 0 | 評價/貼文 0 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/25 下午 02:50:41
謝謝凡人&bk大大^^
作者 : mictzen(mic)
[ 貼文 127 | 人氣 3078 | 評價 510 | 評價/貼文 4.02 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/25 下午 03:07:52
這是我想到的另一種思維 (截斷法) 也就是另一種寫法
參考看看
應該粉快速
for SQL Server
select replace(name,'-',char(0)) as name from sys_user,frm_in where sys_user.id=frm_in.ChargeName
作者 : mictzen(mic)
[ 貼文 127 | 人氣 3078 | 評價 510 | 評價/貼文 4.02 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/25 下午 03:09:32
select replace(name,'_',char(0)) as name from sys_user,frm_in where sys_user.id=frm_in.ChargeName
作者 : aaaaaaaa(路人) SQL Language優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 271 | 人氣 11161 | 評價 1760 | 評價/貼文 6.49 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/26 下午 02:39:42
ms-sql
找出有符合字串'_',回傳數值再減1,即是連'_'也不取
PATINDEX可判斷是否有要查詢之字串(有回傳1沒有0)

select case when PATINDEX('%_%',name) > 0
then substring(name,1,CHARINDEX('_',name,1)-1)
else name end as name
from sys_user,frm_in
where sys_user.id=frm_in.ChargeName
 板主 : AXNET
 > SQL Language - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - SQL Language - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
SQL Language
1 ㄉ一ˊㄎㄜˋ 1330 
2 路人 1270 
3 坤哥 700 
4 吳馨琳 460 
5 凡人 440 
6 老骨頭 390 
7 pome5 380 
8 BK. 330 
9 Tony 310 
10 HKLN.net 250 
SQL Language
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.09375