您好!欢迎访问家园网-www.jy.wang!

家园网

SQL Server 类型转换代码

网络 作者:本站 点击:

SELECT goods_id AS 商品ID,goods_name AS 商品名称,
convert(char(2),sales_sum)+'个' AS 销售数量,
convert(char(8),shop_price)+'元' AS 商场价格 FROM goods;

SQL Server 类型转换代码逐行讲解

这段代码是从商品表(goods)中查询数据,并使用 CONVERT 函数将数字类型转换为字符串,然后拼接单位。


一、代码整体结构

sql

SELECT 
    goods_id AS 商品ID,
    goods_name AS 商品名称,
    convert(char(2), sales_sum) + '个' AS 销售数量,
    convert(char(8), shop_price) + '元' AS 商场价格 
FROM goods;


二、逐部分讲解

第1-2行:普通字段查询

sql

goods_id AS 商品ID,goods_name AS 商品名称,

部分含义
goods_id商品编号字段
AS 商品ID将列名显示为"商品ID"
goods_name商品名称字段
AS 商品名称将列名显示为"商品名称"

第3行:销售数量字段(重点)

sql

convert(char(2), sales_sum) + '个' AS 销售数量,

CONVERT 是什么?

单词词源含义
Convert拉丁语 convertere(转变、转化)转换、转变

convertere 的词源拆解

  • con-:一起、共同

  • vertere:转、转向

字面意思:把一种形式"转向"另一种形式。

语法

sql

CONVERT(目标数据类型, 要转换的值)

参数含义
char(2)目标类型:固定长度2个字符的字符串
sales_sum要转换的值:销售数量(数字类型)

为什么要转换?

sql

-- 错误写法:数字不能直接加字符串sales_sum + '个'   -- ❌ 报错-- 正确写法:先转成字符串,再加单位convert(char(2), sales_sum) + '个'   -- ✅ 正确

char(2) 的含义

部分含义
charCharacter(字符)的缩写
(2)固定长度为 2 个字符

示例

原值转换结果
5'5 '(后面补一个空格,凑够2位)
12'12'(正好2位)
100'10'(会被截断!因为只能放2个字符)

第4行:商场价格字段

sql

convert(char(8), shop_price) + '元' AS 商场价格

部分含义
convert(char(8), shop_price)将数字价格转换为固定8位的字符串
+ '元'拼接"元"字
AS 商场价格列名显示为"商场价格"

三、执行效果示例

假设原表数据

goods_id

goods_name

sales_sum

shop_price

101

手机

5

2999

102

电脑

12

5999

103

耳机

3

199


查询结果

商品ID

商品名称

销售数量

商场价格

101

手机

5 个

2999元

102

电脑

12个

5999元

103

耳机

3 个

199元

注意

  • char(2) 转换 5 → '5 '(5后面有个空格)

  • char(8) 转换 2999 → '2999 '(后面补4个空格)


四、CONVERT 与 CAST 的区别

对比项CONVERTCAST
语法CONVERT(类型, 值)CAST(值 AS 类型)
格式控制✅ 支持(如日期格式)❌ 不支持
SQL标准❌ SQL Server 特有✅ 标准SQL

sql

-- 两种写法效果相同SELECT CONVERT(char(10), sales_sum) FROM goods;SELECT CAST(sales_sum AS char(10)) FROM goods;


五、char 与 varchar 的区别

对比项char(n)varchar(n)
含义固定长度字符串可变长度字符串
存储固定占用 n 个字符实际长度 + 1-2字节
空格处理自动补空格不补空格
适用场景长度固定的数据(如身份证号)长度可变的数据(如姓名)

示例

sql

-- char(2) 存 '5' → 实际存储 '5 '(2个字符)-- varchar(2) 存 '5' → 实际存储 '5'(1个字符)


六、潜在问题及改进建议

问题1:char(2) 可能截断数据

sql

-- 如果销量是 100(3位数),char(2) 只能存 '10'(丢失最后一位)convert(char(2), sales_sum)  -- ❌ 可能截断

改进:使用足够大的长度

sql

convert(char(10), sales_sum) + '个'  -- 足够容纳销量

问题2:char(8) 会产生多余空格

sql

-- 价格 2999 转成 char(8) → '2999    '(后面4个空格)

改进:使用 varchar 避免空格

sql

convert(varchar(10), shop_price) + '元'  -- 没有多余空格


七、总结

问题答案
CONVERT 是什么?SQL Server 的类型转换函数
为什么需要 CONVERT数字不能直接和字符串拼接,需要先转换
char(2) 是什么意思?固定长度2个字符的字符串
+ '个' 做什么?字符串拼接,给数字加上单位
AS 做什么?给查询结果的列起别名

一句话总结:这段代码使用 CONVERT 函数将数字类型的销量和价格转换成字符串,然后拼接单位("个"和"元"),让查询结果更直观易读。char(2) 和 char(8) 指定了转换后的字符串长度,但要注意可能的数据截断问题


标签: