① 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)