大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
MySQL 自己不带有 to_char 这个函数的。
创新互联建站2013年至今,是专业互联网技术服务公司,拥有项目成都网站设计、网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元沙湾做网站,已为上家服务,为沙湾各地企业和个人服务,联系电话:18980820575
你要模仿 Oracle, 写一个 MySQL 的 TO_CHAR 函数?
这个恐怕有点麻烦。
因为 Oracle 的 TO_CHAR 是可以把 日期型的, 数值型的, 转换为 字符类型。
你这个MySQL 下的 to_char , 只要转换日期呢? 还是转换 数字?
用户函数?那应该是自己定义的函数吧
常用的函数有
1、MySQL 提供几个处理null的函数
1)、ifnull(expr1,expr2):如果expr1不为null,则返回expr1,否则返回expr2;
2)、nullif(expr1,expr2):expr1与expr2相等,则返回null,否则返回expr1;
3)、if(expr1,expr2,expr3):类似于三目运算符,expr1为true,返回expr2,否则返回expr3;
4)、isnull(expr1):判断expr1是否为null,expr1为null,返回true,否则返回false。
2、MySQL case函数
CASE 函数是一个流程控制函数,作用同c++中switch语句。有如下两种使用方法:
1)、用值比较
case value
when compareValue1 then result1
when compareValue2 then result2
……
else result
end
用value依次与各compareValue比较,相等则返回对应的result,并退出case函数。
2)、用条件判断
case
when condition1 then result1
when condition2 then result2
……
else result
end
各condition都为布尔表达式,从上到下判断,为true则返回对应的result,并退出case函数。
使用示例:
SELECT student_name,CASE
WHEN student_id3 THEN ‘初级班’
WHEN student_id=6 THEN '中级班'
ELSE ‘高级版'
END
FROM student_table;
说明:上面语句选择student_name与student_id两列,只是student_id用CASE 函数替换为对应的文字说明。
3、部分时间日期函数
1)、CURTIME():返回完整的时间类型值,如:’2016-08-10 22:13:30‘;
2)、CURDATE():返回当前日期,时间部分为0,如:’2013-08-10 00:00:00‘;
3)、ADDTIME(time1,time2):time1为time或datetime表达式,time2为time表达式,如:
addtime(’2016-08-10 22:20:00‘,’10:10:10')返回2016-08-11 08:30:10;
addtime(’2016-08-10 22:20:00‘,’1 10:10:10')返回2016-08-12 08:30:10;
addtime(’22:20:00‘,’10:10:10')返回32:30:10,所以只有时分秒时应注意相加后的值是否大于23:59:59!
注:上面的参数值都可带微秒[.xxxxxx]。
4、部分字符串函数
1)、LEFT(param,length):返回包含param左边的length 个字符的字符串。length 大于param 长度时返回整个param。
2)、RIGHT(param,length):返回包含param右边length 个字符的字符串。同理。
最大用处在于param 可以是选出的某个列的数据,如最基础的用法:
select LEFT(e.name,5) from table1 e;
三、常用分组和组函数
常用组函数:
注:distinct:区别的。指定计算是否包含所有重复值。
1、avg([distinct|all]expr):计算多行expr的平均值,其中expr可以是变量、常量或数据列,但其类型必须是数值型;
2、count(*|[distinct|all]expr):计算多行的记录数。expr同上,但数据类型可以是任意类型;
3、max(expr):计算多行expr的最大值,expr同count中;
4、min(expr);
5、sum([distinct|all]expr):计算多行expr的总和,expr可以是变量、常量或数据列,但数据类型必须是数值型。
group by 分组与having过滤:
语法:
#查询结果按分组列不重复的显示。
select * from tableName group by columnName1[,columnName2,……];
说明:对于MySQL 如果被分组的列对应的其它列有多个对应值,则只显示第一条记录的值。
mysql CREATE FUNCTION HelloWorld4()
- RETURNS VARCHAR(20)
- BEGIN
- RETURN 'Hello World!';
- END;
- //
Query OK, 0 rows affected (0.00 sec)
mysql select HelloWorld4() //
+---------------+
| HelloWorld4() |
+---------------+
| Hello World! |
+---------------+
1 row in set (0.00 sec) ...展开mysql CREATE FUNCTION HelloWorld4()
- RETURNS VARCHAR(20)
- BEGIN
- RETURN 'Hello World!';
- END;
- //
Query OK, 0 rows affected (0.00 sec)
mysql select HelloWorld4() //
+---------------+
| HelloWorld4() |
+---------------+
| Hello World! |
+---------------+
1 row in set (0.00 sec)
mysql CREATE FUNCTION HelloWorld4()
- RETURNS VARCHAR(20)
- BEGIN
- RETURN 'Hello World!';
- END;
- //
Query OK, 0 rows affected (0.00 sec)
mysql select HelloWorld4() //
+---------------+
| HelloWorld4() |
+---------------+
| Hello World! |
+---------------+
1 row in set (0.00 sec)
如果你会其它数据库的话, 那么看看那个 SQL 存储过程编写 参考手册 对你会有些帮助。
语法:Create function function_name(参数列表)returns返回值类型
函数体 函数名,应合法的标识符,不应与系统关键字冲突。
一个函数应该属于某个数据库,可以使用db_name.funciton_name的形式执行当前函数所属数据库,否则为当前数据库。
参数部分,由参数名和参数类型组成。
返回值类类型.注意,一定要有return返回值语句。
创建第一个函数:
mysql DROP FUNCTION IF EXISTS SP_FUNC_DBDH_ONE -- 删掉已存在函数 DELIMITER -- 定义分隔符,必须要有 ,本例为 可以为得数字符,例如: $$,%%,**
mysql CREATE FUNCTION SP_FUNC_DBDH_ONE( PARA_VAR varchar(30)) -- 多个参数用,分割 参数
的类型必须是mysql列存在的类型
- RETURNS VARCHAR(100) -- 指定返回值类型,如果你不确定返回
文本长度,可以使用text
- BEGIN
- DECLARE NAYIBU_FIR VARCHAR(30) DEFAULT 'THIS IS MY FIRST,'; -- 定义变量,设置默认值
- SET NAYIBU_FIR = concat(NAYIBU_FIR,PARA_VAR);
- RETURN NAYIBU_FIR; -- 返回值
- END $$
后面有你在前面定义的分割符号
Query OK, 0 rows affected (0.00 sec)
mysql DELIMITER
调用自定义函数,输出结果如下:
mysql SELECT SP_FUNC_DBDH_ONE('PROGRAM');
+------------------------------+
| SP_FUNC_DBDH_ONE('PROGRAM') |
+------------------------------+
| 'THIS IS MY FIRST, PROGRAM |
+------------------------------+
1 row in set (0.00 sec)