mysql中计算空格数_MySQL ------ 计算字段(trim(),now(),Concat(),as) (九)

本文探讨了如何在数据库查询中利用计算字段进行数据转换,如去除空格、拼接字段和执行算术计算。通过实例说明如何使用SQL函数如Trim(), Concat(), 和算术运算符,提升数据呈现的效率和一致性。

存储在数据库表中的数据一般不是应用程序所需要的格式:

一种是从数据库中检索出转换、计算或格式化过的数据

另一种是将检索出数据在客户机应用程序或报告程序中重新格式化

这里当然建议使用第一种,借助计算字段完成,计算字段是运行时在select 语句内创建的。

字段(field) : 基本与列(colum)的意思相同,不过在术语中字段通常用在计算字段的连接上,经常会互换使用,列指的是数据库的列

注意:

1、只有数据库知道select 语句中哪些列是实际的表列,那些列是计算字段

2、从客户机(如应用程序)的角度看,计算字段的数据是以与其他列的数据,以相同的方式返回的。

3、SQL 语句内完成的许多转换和格式化的工作在客户机应用程序内也可以完成,但是数据库服务器比用程序要快,因为设计的DBMS 可以快速有效的完成这些处理

1、去除空格   (trim,rtrim,ltrim)

Trim () 函数:去掉字符串左右两边的空格

RTrim () 函数:去掉字符串右边的空格

LTrim () 函数:去掉字符串左边的空格

21f48dc7d2af71cf653d0b2f4a5f2624.png

2、拼接字段

拼接(concatenate): 将值联结到一起构成单个值。

注意:多数的DBMS 使用 + 或 || 来实现拼接,Mysql 使用Concat() 函数实现。

借助Concat() 拼接串,将多个串连接起来形成一个较长的串,

用到的表

b3e7a15227f4cc48490796ad45ab6011.png

--将供应商表中的名字和所处城市按照 名字(国家) 的形式放在一块,共有四个元素,名字,左边括号,国家,右边括号

select Concat (vend_name,'(',vend_country,')') from vendors order by vend_name;

d198dfc0e8c16961e8c7f880625f398d.png

注意:

1、Concat () 拼接串需要一个或多个指定的串,各个串之间用逗号分隔。

--与trim 组合使用

select Concat (vend_name,'(',trim(vend_country),')') from vendors order by vend_name;

3、别名 ( as)  :  一个字段或值的替换名,关键字 AS (有时也称为导出列)

刚才拼接的字符串的列名,实际上他没有名字只是一个值,

不知道表示什么意思,要是只是查看一下无所谓,但是一个未命名的列不能用于客户机的应用中(不能被程序i引用)

--将计算的字段起个名叫 vend_title

select Concat (vend_name,'(',trim(vend_country),')') AS vend_title from vendors order by vend_name;

9feaa7ab5e67a1812d9b106ffa08406e.png

注意: 别名的其他用途 如在实际的表列名包含不符合规定的字符(如空格)时重新命名它,在原来的名字含混容易误解时扩充它。

导出列:别名有时也称为导出列(derived column),不管称为什么他们都代表着相同的东西

4、执行算术计算

7a2f08d6216097541d3090f1b46fc8f6.png

来个小例子:

用到的表

53c24e2c8571d0107eea342ab880a27d.png

--将订单号为 20005 的商品查出来

select prod_id,quantity,item_price from orderitems where order_num = 20005;

1c2056428ae26b92903ba20f75546203.png

我们可以看到,单价和订购数量,但是总价没有,下面借助mysql 的算数操作符实现

--计算商品总价

select prod_id,quantity,item_price,quantity*item_price as total_Price from orderitems where order_num = 20005;

3f8e94617c98ec069855f4992550fba8.png

测试计算;使用select, 虽然Select 通常用来从表中检索数据,但也可以省略FROM 子句简单的访问和处理表达式。

--获取系统当前时间

select NOW();

f56414baf01f4ebd6255c1dc2a77668e.png

INSERT INTO t_lib ( plate_length_begin, plate_length_end, plate_width_begin, plate_width_end, slot_length_begin, slot_length_end, hole_group_upper_begin, hole_group_upper_end, hole_group_lower_begin, hole_group_lower_end, slot_count, hole_size_avg_h, hole_size_avg_v, hole_size_max_h, hole_size_max_v, specs_count, create_time ) SELECT -- CAST转为无符号整,FLOOR计算区间,CONCAT拼接字符串 -- plate_length 每 180 一个区间 (FLOOR(CAST(plate_length AS UNSIGNED) / 180) * 180) AS plate_length_begin, (FLOOR(CAST(plate_length AS UNSIGNED) / 180) * 180 + 179) AS plate_length_end, -- plate_width 每 100 一个区间 (FLOOR(CAST(plate_width AS UNSIGNED) / 100) * 100) AS plate_width_begin, (FLOOR(CAST(plate_width AS UNSIGNED) / 100) * 100 + 99) AS plate_width_end, -- solt_length 每 300 一个区间 (FLOOR(slot_length / 300) * 300) AS slot_length_begin, (FLOOR(slot_length / 300) * 300 + 299) AS slot_length_end, -- hole_group_upper 每 5 个孔一组 (FLOOR(hole_group_upper / 5) * 5) AS hole_group_upper_begin, (FLOOR(hole_group_upper / 5) * 5 + 4) AS hole_group_upper_end, -- hole_group_lower 每 2 个孔一组 (FLOOR(hole_group_lower / 2) * 2) AS hole_group_lower_begin, (FLOOR(hole_group_lower / 2) * 2 + 1) AS hole_group_lower_end, -- solt_count 每个就是一个区间 slot_count, -- hole_size_avg_h 每个就是一个区间 CAST(TRIM(hole_size_avg_h) AS UNSIGNED) AS hole_size_avg_h, -- hole_size_avg_v 转换为整 CAST(TRIM(hole_size_avg_v) AS UNSIGNED) AS hole_size_avg_v, -- hole_size_max_h 转换为整 CAST(TRIM(hole_size_max_h) AS UNSIGNED) AS hole_size_max_h, -- hole_size_max_v 转换为整 CAST(TRIM(hole_size_max_v) AS UNSIGNED) AS hole_size_max_v, -- 统计该分组的量 COUNT(*) AS specs_count, -- 记录创建时间和更新时间 NOW() AS create_time FROM t_analyze GROUP BY plate_length_begin, plate_length_end, plate_width_begin, plate_width_end, slot_length_begin, slot_length_end, hole_group_upper_begin, hole_group_upper_end, hole_group_lower_begin, hole_group_lower_end, slot_count, hole_size_avg_h, hole_size_avg_v, hole_size_max_h, hole_size_max_v mysql运行报错:1292 - Truncated incorrect INTEGER value: '809.5'
最新发布
03-08
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值