1. sql 替換 兩特定字元(含特定字元)之間的欄位
如果我說如果啊,如果是abc?def?ghi?jkl你打算怎麼換是abc+jkl還是abc++jkl,當然如果沒有這種情況算我沒說。
還有你什麼資料庫啊,不同的資料庫用到的函數也不是完全一樣的。當然如果都是三位的那就簡單了,如果不都是3位的,那在用下面的方法
比如定位中oracle用instr,sqlserver中用charindex
(1)定位,定位?的位置,不知道你的?是不是字元型的,我假設它是字元型的
oracle:instr('?',欄位,1,1)(第一次出現問號的位置),instr('?',欄位,-1,1)(最後一次出現問號的位置),如果只有兩個問號也可以寫成instr('?',欄位,1,2)
sqlserver:charindex('?',欄位,1)(第一次出現問號),len(欄位)-(charindex('?',reverse(欄位))-1)(最後一次出現問號),如果只有兩個問號,可以寫成charindex('?',欄位,charindex('?',欄位,1)+1)
(2)截取需要替換的字元串substring函數,這個二者基本差不多
(3)替換,二者也是大同小異(函數基本相同,但寫法上有些區別),我就寫一個。
oracle: select replace(欄位,subter(欄位,instr('?',欄位,1,1),instr('?',欄位,-1,1)),'+') from table
至於sqlserver的那就自己完成吧,oracle我的把握大一些,sqlserver需要試驗才行,我這里可沒有相關環境。
註:我忘了問號需不需要轉譯了,這個你自己試試看吧。
2. sqlserver中如何進行截取字元串然後再計算
oracle中的方法可以這樣,但是不知道sql server中支不支持相應的函數,你可以試一下
select replace(t.number,'m','') num from table1 t //去掉m 變成100*200但是這是varchar類型不是數字
(1)instr(replace(t.number,'m',''),'*',1) 從100*200的第1位截取到 '*' 的長度,注:這時是長度,不是數字100
substr(num,1,instr(replace(t.number,'m',''),'*',1)-1) 從第一位截取到'*'之前,即取出100
(2)instr(replace(t.number,'m',''),'*',-1) 從100*200的最後1位截取到 '*' 的長度
substr(num,-1,instr(replace(t.number,'m',''),'*',-1)-1) 取出200
然後(1)*(2)就可以了(把substr裡面的num換成 replace(t.number,'m',''))
思路就這樣,你再整理一下就可以了
3. oracle 中的instr替換成sqlserver的什麼函數
Oracle:INSTR(<C1>,<C2>[,I][,J])
SQL Server:CHARINDEX(<C1>,<C2>[,I])
說明:在C2中從I開始搜索C1第1次出現的位置。I:默認1
4. SQL語句查詢條件有沒有包含的函數
當然有啊
看你什麼資料庫了
oracle里叫instr,sqlserver里叫charindex
不過返回的不是真假,而是0或其他數字,如果是0,表示不包含,如果是大於0的,則表示包含
instr和charindex的用法你查查網路吧,主要就是某一個字元串是否包含另一個字元串,如果包含的話,返回的是這個字元串的起始位置
5. sql中如何在where字句里截取某個欄位的前幾位字元
sql中在where字句里截取字元方法如下:
1、如果是sqlserver:where left(p.end_time,4) = '2012'。
2、如果是Oracle:where substr(p.end_time,0,4) = '2012'。
舉例:
1、oracle: 'where substr(欄位名,1,2)='''123''''
2、sqlserver: 'where substring(欄位名,1,2)='''123''''
(5)instrsqlserver擴展閱讀:
sql中,常用函數介紹:
1、AVG():返回平均值
2、COUNT():返回行數
3、FIRST():返回第一個記錄的值
4、LAST():返回最後一個記錄的值
5、MAX():返回最大值
6、MIN():返回最小值
7、SUM():返回總和
8、UCASE():將某個欄位轉換為大寫
9、LCASE():將某個欄位轉換為小寫
10、MID():從某個文本欄位提取字元
11、LEN():返回某個文本欄位的長度
12、ROUND():對某個數值欄位進行指定小數位數的四捨五入
13、NOW():返回當前的系統日期和時間
14、FORMAT():格式化某個欄位的顯示方式
15、INSTR():返回在某個文本域中指定字元的數值位置
16、LEFT():返回某個被請求的文本域的左側部分
17、RIGHT():返回某個被請求的文本域的右側部分
6. mysql code轉換
今天處理一個需求,表欄位中存的是以逗號分割的code,另一張表中存放著code對應的code_name,現在又要要求把表中的欄位的code轉換成code_name並以逗號分割,形式和表欄位相同。
需求說明:
Mysql:用逗號分割的CODE轉換成NAMEX
Mysql:用逗號分割的CODE轉換成NAME
達到的效果:
Mysql:用逗號分割的CODE轉換成NAME
為了解決這個問題我就想到以前用sqlserver寫的split函數,准備拿過來修改下,結果發現兩個create function 語法不通,試圖修改了下然後發現mysql貌似不支持表變數。這下完了,就不能把逗號分割的code以表的形式傳出來去匹配了。然後去網上找mysql的split函數發現怎麼這么麻煩,寫一個函數,還要先創建兩個函數做鋪墊。果斷放棄了。
然後找了一些資料用mysql自帶的函數解決了這個問題
1、INSTR函數(INSTR相當於sqlserver的CharIndex函
7. SQLserver字元型數據在哪裡
語法如下:instr(string1,string2,start_position,nth_appearance)。
SqlServer有如下幾種聚合函數SUM、AVG、COUNT、COUNT(*)、MAX和MIN,但是這些函數都只能聚合數值類型,無法聚合字元串。
8. sql 怎樣定位一個字元所在的位置
可以通過INSTR方法來進行查詢:
sql:select INSTR('abcdefg ','c') from al;
輸出結果:3。
解釋:以上sql就是查詢c字元在「abcdefg」中的位置。
9. sql 刪除指定字元串
1、創建資料庫表