① sql 查詢指定字元串的位置
可用charindex函數。
如:查找字元串中「你好」的位置
執行:
selectcharindex('你好','2432你好dsfasdf')
結果:
結論:「你好」中的「你」的起始位置是5,所以這樣就能判斷出指定字元的位置了。
② oracle資料庫中的instr的具體用法,在網上搜了很多,最終還是不明白,請教高手解釋。
首先,你運行下這句
selectinstr('123,456',',')fromal
這個就是要查找逗號在123,456中的位置,結果是4,這個你應該明白吧,就是左數第4位是逗號
然後。這句
selectinstr('123,456,789',',')fromal
結果還是4,因為後邊不加參數的話,就代表oracle要從最左端起,找第一個逗號,所以還是4,當你想查第二個逗號的位置的時候
selectinstr('123,456,789',',',5)fromal
後邊多了一個5,也就是以5為起始位,開始找第一個逗號,所以最後結果就是8,也就是你要找的第二個逗號的位置了
4個參數
selectinstr('123,456,789',',',1,2)fromal
就是代表從第一位開始取,取第二個逗號的位置,結果是8,如果2換成3的話,因為不存在第三個逗號,所以返回0
③ 怎樣解決資料庫數據存在逗號問題
access,mssql及mysql中的逗號不存在什麼問題
access存在日文的問題,其他資料庫都沒有的!
樓主用的是什麼資料庫?
④ 求祝 sql中 取一個欄位里第一個逗號前的數值。
Declare @a varchar(1000)
Declare @i int
Set @i = 0
Set @a = 'A,B,C,D,E,F,G,H,I'
While(@i <=Len(@a))
Begin
Print Substring(@a,CHARINDEX(',',@a)+@i-1,1)
Set @i = @i + 2
ENd
可以取出裡面所有的字母
⑤ 高分,在線等。編寫JAVA代碼,實現一個字元串的第一個逗號查找
privatestaticStringstr="5,95,137.5,125";
publicstaticvoidmain(String[]args){
Stringfirst=str.substring(0,str.indexOf(","));
intfirstNum=Integer.parseInt(first);
if(firstNum>5){
System.out.println(1);
}elseif(firstNum==5){
System.out.println(0);
}else{
System.out.println(2);
}
}
⑥ Mysql資料庫一個欄位內多個值如何統計個數
CREATE TABLE person (
name varchar(20)
);
INSERT INTO person VALUES ('a,b,c');
INSERT INTO person VALUES ('a,b');
INSERT INTO person VALUES ('a,c');
DELIMITER //
DROP FUNCTION GetTextCount //
/**********
-- 獲取字元串中有幾個部分.
**********/
CREATE FUNCTION GetTextCount(pSourceText VARCHAR(255), pDivChar CHAR(1))
RETURNS TINYINT
BEGIN
-- 預期結果.
DECLARE vResult TINYINT;
-- 當前逗號的位置.
DECLARE vIndex INT;
-- 前一個逗號的位置.
DECLARE vPrevIndex INT;
-- 結果的初始值.
SET vResult = 1;
-- 查詢第一個 逗號的位置.
SET vIndex = INSTR(pSourceText, pDivChar);
IF vIndex = 0 THEN
-- 參數中沒有逗號,直接返回.
RETURN vResult;
END IF;
-- 初始化情況,前一個逗號不存在.
SET vPrevIndex = 0;
-- 循環處理。
WHILE vIndex > 0 DO
-- 結果遞增.
SET vResult = vResult + 1;
-- 前一個逗號的位置 = 當前逗號的位置
SET vPrevIndex = vIndex;
-- 查詢下一個逗號的位置.
SET vIndex = LOCATE(pDivChar, pSourceText, vPrevIndex + 1);
END WHILE;
-- 返回結果.
RETURN vResult;
END;
//
DROP FUNCTION GetTextValue //
/**********
-- 獲取字元串中具體某一個部分的數據.
**********/
CREATE FUNCTION GetTextValue(pSourceText VARCHAR(255), pDivChar CHAR(1), pIndex TINYINT)
RETURNS VARCHAR(255)
BEGIN
-- 預期結果.
DECLARE vResult VARCHAR(255);
IF pIndex = 1 THEN
SELECT SUBSTRING_INDEX(pSourceText, pDivChar, 1) INTO vResult;
ELSE
SELECT
REPLACE(
SUBSTRING_INDEX(pSourceText, pDivChar, pIndex),
CONCAT(SUBSTRING_INDEX(pSourceText, pDivChar, pIndex - 1) , pDivChar),
'') INTO vResult;
END IF;
-- 返回.
RETURN vResult;
END;
//
DELIMITER ;
SELECT
GetTextValue(t.name, ',', MaxNum.No) AS `名稱`,
COUNT(*) AS `個數`
FROM
person t,
(SELECT 1 No UNION ALL
SELECT 2 No UNION ALL
SELECT 3 No UNION ALL
SELECT 4 No UNION ALL
SELECT 5 No ) MaxNum
WHERE
GetTextCount(t.name, ',') >= MaxNum.No
GROUP BY
GetTextValue(t.name, ',', MaxNum.No);
+------+------+
| 名稱 | 個數 |
+------+------+
| a | 3 |
| b | 2 |
| c | 2 |
+------+------+
3 rows in set (0.01 sec)
⑦ SQL 查詢的時候截取欄位在逗號前的部分
可以使用substring_index(column, ',', 2)方法來實現。
具體SQL語句為:
select id,name,substring_index(address, ',', 2) from people;
substring_index(address, ',', 2)的意思是截取第二個 ',' 之前的所有字元。
(7)資料庫第一個逗號位置擴展閱讀
sql中substring()的相關用法介紹:
1、SUBSTRING(name,3) 截取name這個欄位 從第三個字元開始,之後的所有個字元
SELECT SUBSTRING('1234567',3)
結果:34567
2、SUBSTRING(name, -4) 截取name這個欄位的第 4 個字元位置(倒數)開始取,直到結束
SELECT SUBSTRING('1234567',-4)
結果:4567
3、SUBSTRING(name, -4,2) 截取name這個欄位的第 4 個字元位置(倒數)開始取,只截取之後的2個字元
SELECT SUBSTRING('1234567',-4,2)
結果:45
4、substring_index('www..com', '.', 2) 截取第二個 '.' 之前的所有字元
SELECT substring_index('www..com', '.', 2)
⑧ 一條數據,在sql中 查找倒數第一個逗號的位置
DECLARE @Str VARCHAR(50)
SET @Str = ',123456,'
select LEN(@Str) - CHARINDEX(',', REVERSE(@Str)) + 1
----返回值---
8
⑨ Mysql資料庫一個欄位內多個值如何統計個數
CREATETABLEperson(
namevarchar(20)
);
INSERTINTOpersonVALUES('a,b,c');
INSERTINTOpersonVALUES('a,b');
INSERTINTOpersonVALUES('a,c');
DELIMITER//
DROPFUNCTIONGetTextCount//
/**********
--獲取字元串中有幾個部分.
**********/
CREATEFUNCTIONGetTextCount(pSourceTextVARCHAR(255),pDivCharCHAR(1))
RETURNSTINYINT
BEGIN
--預期結果.
DECLAREvResultTINYINT;
--當前逗號的位置.
DECLAREvIndexINT;
--前一個逗號的位置.
DECLAREvPrevIndexINT;
--結果的初始值.
SETvResult=1;
--查詢第一個逗號的位置.
SETvIndex=INSTR(pSourceText,pDivChar);
IFvIndex=0THEN
--參數中沒有逗號,直接返回.
RETURNvResult;
ENDIF;
--初始化情況,前一個逗號不存在.
SETvPrevIndex=0;
--循環處理。
WHILEvIndex>0DO
--結果遞增.
SETvResult=vResult+1;
--前一個逗號的位置=當前逗號的位置
SETvPrevIndex=vIndex;
--查詢下一個逗號的位置.
SETvIndex=LOCATE(pDivChar,pSourceText,vPrevIndex+1);
ENDWHILE;
--返回結果.
RETURNvResult;
END;
//DROPFUNCTIONGetTextValue//
/**********
--獲取字元串中具體某一個部分的數據.
**********/
CREATEFUNCTIONGetTextValue(pSourceTextVARCHAR(255),pDivCharCHAR(1),pIndexTINYINT)
RETURNSVARCHAR(255)
BEGIN
--預期結果.
DECLAREvResultVARCHAR(255);
IFpIndex=1THEN
SELECTSUBSTRING_INDEX(pSourceText,pDivChar,1)INTOvResult;
ELSE
SELECT
REPLACE(
SUBSTRING_INDEX(pSourceText,pDivChar,pIndex),
CONCAT(SUBSTRING_INDEX(pSourceText,pDivChar,pIndex-1),pDivChar),
'')INTOvResult;
ENDIF;
--返回.
RETURNvResult;
END;
//
DELIMITER;
SELECT
GetTextValue(t.name,',',MaxNum.No)AS`名稱`,
COUNT(*)AS`個數`
FROM
persont,
(SELECT1NoUNIONALL
SELECT2NoUNIONALL
SELECT3NoUNIONALL
SELECT4NoUNIONALL
SELECT5No)MaxNum
WHERE
GetTextCount(t.name,',')>=MaxNum.No
GROUPBY
GetTextValue(t.name,',',MaxNum.No);
+------+------+
|名稱|個數|
+------+------+
|a|3|
|b|2|
|c|2|
+------+------+
3rowsinset(0.01sec)