相关文章推荐
不要命的西装  ·  msql报错ERROR 2002 ...·  2 年前    · 
强健的黑框眼镜  ·  你还有多少天退休?看看强大的函数怎么计算 - 知乎·  2 年前    · 
大力的手链  ·  Too large frame error ...·  2 年前    · 
面冷心慈的苦咖啡  ·  【Flutter混编】InAppWebVie ...·  2 年前    · 
深沉的烈马  ·  C/C++ 视频播放器开发 - 知乎·  2 年前    · 
Code  ›  sql 四舍五入 保留两位小数开发者社区
select convert varchar 四舍五入
https://cloud.tencent.com/developer/article/2095705
打酱油的手套
2 年前
作者头像
全栈程序员站长
0 篇文章

sql 四舍五入 保留两位小数

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 全栈程序员必看 > 正文

sql 四舍五入 保留两位小数

发布 于 2022-09-06 11:21:32
457 0
举报

大家好,又见面了,我是你们的朋友全栈君。

一、问题描述

数据库 里的 float momey 类型,都会精确到多位小数。但有时候 我们不需要那么精确,例如,只精确到两位有效数字。

二、sqlserver解决方案:

1. 使用 Round() 函数,如 Round(@num,2) ,其中参数 2 表示 保留两位有效数字。

缺点:Round() 只是负责四舍五入到两位小数,但是不负责去掉后面的0。

print ROUND(13.145, 2);

或者select ROUND(13.145, 2);

结果为:13.150。

2. 使用 Convert(decimal(18,2),@num) 实现转换,其中参数 2 表示 保留两位有效数字。

print Convert(decimal(18,2),13.145)

结果为:13.15。

3.使用 cast(@num as decimal(18,2)) 实现转换,其中参数 2 表示 保留两位有效数字。

print cast(13.145 as decimal(18,2))

结果为:13.15。

三、CAST与CONVERT比较

1、CAST与CONVERT相同点:

在大部分情况下,两者执行同样的功能,都可以执行数据类型转换,且都默认实现了四舍五入,

相当于 print cast(round(13.145) as numeric(18,2)) 。

2、CAST与CONVERT不同点:

CONVERT还提供一些特别的日期格式转换,而CAST没有这个功能。

既然CONVERT包括了CAST的所有功能,而且CONVERT还能进行日期转换,那么为什么需要使用CAST呢?实际上,这是为了ANSI/ISO兼容。CAST是ANSI兼容的,而CONVERT则不是。

语法:

  CAST (expression AS data_type [ (length ) ])
  CONVERT (data_type [ ( length ) ] , expression [ , style ])

示例:

  SELECT 'AB' + 1    --此语句报错,在将 varchar 值 'AB' 转换成数据类型 int 时失败。
  SELECT 'AB' + CAST(1 AS varchar)    --输出 AB1
  SELECT 'AB' + CONVERT(varchar,1)    --输出 AB1

CAST和CONVERT都能转换时间:

  SELECT CONVERT(DateTime,'2011-07-11')    --输出 2011-07-11 00:00:00.000
  SELECT CAST('2011-07-11' AS DateTime)    --输出 2011-07-11 00:00:00.000

但是时间转字符串,CAST没有CONVERT这么多花样:

  SELECT CONVERT(varchar,GETDATE(),5)    --输出 01-07-13
  SELECT CONVERT(varchar,GETDATE(),111)  --输出 2013/07/01
  SELECT CONVERT(varchar,GETDATE(),1)    --输出 07/01/13
 
推荐文章
不要命的西装  ·  msql报错ERROR 2002 (HY000): Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2)_wx61dfdc852c290的技术博客_51CTO博客
2 年前
强健的黑框眼镜  ·  你还有多少天退休?看看强大的函数怎么计算 - 知乎
2 年前
大力的手链  ·  Too large frame error when running spark shell on standalone cluster - Stack Overflow
2 年前
面冷心慈的苦咖啡  ·  【Flutter混编】InAppWebView常见配置&相册问题处理_MYCROW的博客-CSDN博客
2 年前
深沉的烈马  ·  C/C++ 视频播放器开发 - 知乎
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号