本教程分享:《mysql函数》,
mysql 自定义函数 如何传入中文参数
函数dropfunctionifexiststest1;CREATEFUNCTIONtest1(str1VARCHAR(200),str2VARCHAR(200))RETURNSVARCHAR(200)CHARSETutf8BEGINRETURNCONCAT(str1,str2);END;sql:selecttest1('我是',...
函数
drop function if exists test1;
CREATE FUNCTION test1(
str1 VARCHAR(200),
str2 VARCHAR(200)
) RETURNS VARCHAR (200) CHARSET utf8
BEGIN
RETURN CONCAT(str1,str2);
END;
sql:
select test1('我是','中文');
报错:
[SQL]select test1('我是','中文');
[Err] 1366 - Incorrect string value: '\xE6\x88\x91\xE6\x98\xAF' for column 'str1' at row 342
输入非中文是可以得到结果,输入中文就会报错,求大神解答
是数据库字符编码问题,改成utf8就可以了
貌似不会关闭问题,随便来个人 送分了
展开
CREATE FUNCTION `fristPinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
BEGIN
DECLARE V_RETURN VARCHAR(255);
SET V_RETURN = ELT(INTERVAL(CONV(HEX(left(CONVERT(P_NAME USING gbk),1)),16,10),
0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,
0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,
0xC8F6,0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1),
'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z');
RETURN V_RETURN;
END
pinyin :此函数是将一个中文字符串对应拼音母的每个相连 (例如:"中国人"->ZGR)
复制代码 代码如下:
CREATE FUNCTION `pinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
BEGIN
DECLARE V_COMPARE VARCHAR(255);
DECLARE V_RETURN VARCHAR(255);
DECLARE I INT;
SET I = 1;
SET V_RETURN = '';
while I
SET V_COMPARE = SUBSTR(P_NAME, I, 1);
IF (V_COMPARE != '') THEN
#SET V_RETURN = CONCAT(V_RETURN, ',', V_COMPARE);
SET V_RETURN = CONCAT(V_RETURN, fristPinyin(V_COMPARE));
#SET V_RETURN = fristPinyin(V_COMPARE);
END IF;
SET I = I + 1;
end while;
IF (ISNULL(V_RETURN) or V_RETURN = '') THEN
SET V_RETURN = P_NAME;
END IF;
RETURN V_RETURN;
END
示例:
复制代码 代码如下:
mysql> select p.province, fristPinyin(p.province), pinyin(p.province) from province p;
+------------------+-------------------------+--------------------+
| province | fristPinyin(p.province) | pinyin(p.province) |
+------------------+-------------------------+--------------------+
| 北京市 | B | BJS |
| 天津市 | T | TJS |
| 河北省 | H | HBS |
| 山西省 | S | SXS |
| 内蒙古自治区 | N | NMGZZQ |
+------------------+-------------------------+--------------------+
5 rows in set
在mysql中自定义的函数怎么调用
调用如:select 函数名(参数列表)。
mysql中的UDF(自定义函数),可以写好一些方法或 函数,然后进行调用,而且是在SQL语句中可以进行调用。
DROP FUNCTION CalculateAmount
CREATE FUNCTION CalculateAmount(userid INT) RETURNS float(10,2)
BEGIN
DECLARE totalCredits FLOAT;
SELECT SUM(amount) INTO totalAmount FROM credit_user WHERE id =userid;
RETURN totalAmount;
END
要注意的是,在UDF中,不要定义与数据表中重名的列。而在SQL中, 则可以像SELECT CalculateAmount(1);那样去调用了。
mysql中常用的聚合函数有哪些?
最常用最常用的也就avg()算平均值,sum()求和,count()算数量,min()最小值和max()找最大值这几个
mysql自定义函数
写一个函数,接收一个字符串(字符串由英文字母和分隔符(空格 , .三种)组成),
由单个或连续多个分隔符隔开的字母串视为一个单词。函数返回该字符串的单词数量
调用如:select 函数名(参数列表)。 mysql中的UDF(自定义函数),可以写好一些方法或 函数,然后进行调用,而且是在SQL语句中可以进行调用。 DROP FUNCTION CalculateAmount CREATE FUNCTION CalculateAmount(userid INT) RETURNS float(10,2) BEGIN DECLARE totalCredits FLOAT; SELECT SUM(amount) INTO totalAmount FROM credit_user WHERE id =userid; RETURN totalAmount; END 要注意的是,在UDF中,不要定义与数据表中重名的列。而在SQL中, 则可以像SELECT CalculateAmount(1);那样去调用了。
追问
我学mysql没几天,这道题我想了几个小时了一直不知该如何下手,麻烦您写的简单点或直接写出答案。谢谢
怎么使用mysql个生成4位随机数的自定义函数
怎么使用mysql个生成4位随机数的自定义函数啊..
我没用过mySQL写函数啊..头都大了。..急..求帮忙啊..
要求还不重复..
select round(round(rand(),4)*10000);
不用函数直接这样就好了。
非得写函数的话,就
DELIMITER $$
CREATE
FUNCTION get_rand()
RETURNS INT DETERMINISTIC
BEGIN
DECLARE return_no INT;
SELECT ROUND(ROUND(RAND(),4)*10000) INTO return_no;
RETURN return_no;
END$$
DELIMITER ;
mysql存储过程函数怎么运行
call sp_add();
是不是你定义的过程有问题吧,并没有指出返回结果来
像我这样是可以的:
CREATE PROCEDURE sp_add(a int, b int,out c int)
begin
set c=a+ b;
end;
调用过程:
call sp_add (1,2,@a);
select @a;
mysql函数为什么需要禁用
主要介绍如下几个方面的设置:
1.load data infile
?View Code MYSQL
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char' ]
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...)]
LOAD DATA INFILE语句用于高速地从一个文本文件中读取行,并装入一个表中。
这是一个很危险的内置函数,所以一般建议禁用掉(除非程序有用到本地文件)
通过在my.cnf中设置
1
local-infile=0|1 0表示禁用,1表示开启
2.load_file函数
这个函数和上面的load data 函数类似,都是读取本地文件,对于load_file(filename)函数的使用有如下的条件限制:
读取文件并将这一文件按照字符串的格式返回。 文件的位置必须在服务器上,你必须为文件制定路径全名,而且你还必须拥有FILE 特许权。文件必须可读取,文件容量必须小于 max_allowed_packet字节。
若文件不存在,或因不满足上述条件而不能被读取, 则函数返回值为 NULL。
这个主要通过mysql授权来禁用这个函数,收回用户的file权限
1
revoke file on *.* from 'user'@'IP'; //或者不要授予用户的file权限
3.禁用drop命令
1
revoke drop on *.* from 'user'@'IP';
mysql中die函数的问题
$con=mysql_pconnect("59.151.12.43","kxt_db_users","userfor1234%")ordie("Couldnotconnect:".mysql_error());后半句中的die函数每个参数啥意思,中间的英文句号干吗用的。他的返回...
$con = mysql_pconnect("59.151.12.43", "kxt_db_users","userfor1234%")
or die("Could not connect: " . mysql_error());
后半句中的die函数每个参数啥意思,中间的英文句号干吗用的。他的返回值是什么。
or前面的pconnect函数我知道。要详细点
展开
$con = mysql_pconnect("59.151.12.43", "kxt_db_users","userfor1234%")
or die("Could not connect: " . mysql_error());
这句话的意思是连接mysql,如果连接失败,就中止后面代码的运行并给出相应的错误信息.
die()里面就一个参数,就是输出的字符串,英文逗号是连接两个字符串的,"Could not connect"和mysql_error()。mysql_error()返回mysql的错误信息。
$errMsg="Could not connect: " . mysql_error();
$con = mysql_pconnect("59.151.12.43", "kxt_db_users","userfor1234%") or die($errMsg);
这样是不是清楚一点?
追问
谢谢 我就是不明白关系运算符 or 和 字符串链接的运算符 . 的作用,这回明白了
mysql中convert()函数是什么意思?
mysql中convert()函数的意思是用来把一个数据类型的值转换为另一个数据类型。
其他函数:
ASCII(s)
作用: 返回字符串 s 的第一个字符的 ASCII 码。
CHAR_LENGTH(s)
作用: 返回字符串 s 的字符数。
CHARACTER_LENGTH(s)
作用: 返回字符串 s 的字符数。
CONCAT(s1,s2...sn) 作用: 字符串 s1,s2 等多个字符串合并为一个字符串 。
CONCAT_WS(x, s1,s2...sn) 作用: 同 CONCAT(s1,s2,...) 函数,但是每个字符串之间要加上 x,x 可以是分隔符 。
FIELD(s,s1,s2...) 作用: 返回第一个字符串 s 在字符串列表(s1,s2...)中的位置 。
扩展资料:
MySQL 中文排序错误的解决方法
方法1
在 MySQL 数据库中,进行中文排序和查找的时候,对汉字的排序和查找结果是错误的。这种情况在 MySQL 的很多版本中都存在。如果这个问题不解决,那么 MySQL 将无法实际处理中文。
出现这个问题的原因是:MySQL
在查询字符串时是大小写不敏感的,在编绎 MySQL 时一般以 ISO-8859
字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象,一种解决方法是对于包含中文的字段加上 "binary"
属性,使之作为二进制比较,
例如将 "name char(10)" 改成 "name char(10)binary"。
方法2
如果你使用源码编译 MySQL,可以编译 MySQL 时使用 --with--charset=gbk 参数,这样 MySQL 就会直接支持中文查找和排序了。
参考资料来源:百度百科-mySQL
mysql有to char函数吗
mysql没有to_char函数。
oracle中to_char的作用是将日期型和数值型 转换为字符类
date_format(date,'%Y-%m-%d %T')
把括号里面的date更换就行了,这个是转数值型的,日期型是:
str_to_date('2017-05-01 23:59:59','%Y-%m-%d %T')
至于%Y %m 是什么意思,你自己到网上找吧。