当前位置:网站首页>SQL函数 TRUNCATE
SQL函数 TRUNCATE
2022-08-02 13:20:00 【用户7741497】
SQL函数 TRUNCATE
标量数值函数,按指定位数截断一个数。
大纲
{fn TRUNCATE(numeric-expr,scale)}
参数
numeric-expr
- 要截断的数字。数字或数字表达式。scale
- 计算结果为一个整数的表达式,该整数指定要截断的位数,从小数点开始计算。可以是零、正整数或负整数。如果比例是小数,会将其舍入为最接近的整数。
Truncate
返回NUMERIC
或DOUBLE
数据类型。如果NUMERIC-EXPR
的数据类型为DOUBLE
,则TRUNCATE
返回DOUBLE
;否则返回NUMERIC
。
描述
TRUNCATE
通过从小数点开始按小数位数截断NUMERIC-EXPR
。它不对数字进行四舍五入,也不添加填充零。在截断操作之前,将删除前导零和尾随零。
- 如果小数位数为正数,则在小数点右侧的位数处执行截断。如果小数位数等于或大于小数位数,则不会发生截断或零填充。
- 如果
Scale
为零,则该数字将被截断为整数。换句话说,在小数点右侧的零位数处执行截断;所有小数位和小数点本身都被截断。 - 如果小数位数为负数,则在小数点左侧的位数处执行截断。如果小数位数等于或大于数字中的整数位数,则返回零。
- 如果
NUMERIC-EXPR
为零(但表示为00.00
、-0
等)。TRUNCATE
返回0
(零),不带小数位数,无论小数位数是多少。 - 如果
NUMERIC-EXPR
或SCALE
为NULL
,则TRUNCATE
返回NULL
。
TRUNCATE
只能用作ODBC
标量函数(使用花括号语法)。
ROUND
可用于对数字执行类似的截断操作。Trim
可用于对字符串执行类似的截断操作。
TRUNCATE, ROUND, and $JUSTIFY
TRUNCATE
和 ROUND
是执行类似操作的数值函数;它们都可用于减少数字的有效小数位数或整数位数。 ROUND
允许指定舍入(默认)或截断; TRUNCATE
不执行舍入。 ROUND
返回与 numeric-expr
相同的数据类型; TRUNCATE
返回 numeric-expr
作为数据类型 NUMERIC
,除非 numeric-expr
是数据类型 DOUBLE
,在这种情况下它返回数据类型 DOUBLE
。
TRUNCATE
截断到指定数量的小数位数。如果截断导致尾随零,则保留这些尾随零。但是,如果 scale
大于 numeric-expr
规范形式的小数位数,则 TRUNCATE
不会填充零。
ROUND
舍入(或截断)到指定数量的小数位数,但其返回值始终是标准化的,删除尾随零。例如,ROUND(10.004,2)
返回 10
,而不是 10.00
。
当舍入到固定的小数位数很重要时使用 $JUSTIFY
- 例如,在表示货币金额时。 $JUSTIFY
在舍入操作之后返回指定数量的尾随零。当要舍入的位数大于小数位数时,$JUSTIFY
补零。 $JUSTIFY
还右对齐数字,以便 DecimalSeparator
字符在一列数字中对齐。 $JUSTIFY
不会截断。
示例
以下两个示例都将数字截断为两位小数。第一个(使用动态 SQL)将比例指定为整数;第二个(使用嵌入式 SQL)将 scale
指定为解析为整数的主变量:
/// d ##class(PHA.TEST.SQLFunction).Truncate()
ClassMethod Truncate()
{
s myquery = "SELECT {fn TRUNCATE(654.321888,2)} AS trunc"
s tStatement = ##class(%SQL.Statement).%New()
s qStatus = tStatement.%Prepare(myquery)
if qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
s rset = tStatement.%Execute()
d rset.%Display()
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).Truncate()
trunc
654.32
1 Rows(s) Affected
/// d ##class(PHA.TEST.SQLFunction).Truncate1()
ClassMethod Truncate1()
{
s x=2
&sql(
SELECT
{fn TRUNCATE(654.321888,:x)}
INTO
:a
)
if SQLCODE '= 0 {
w !,"Error code ",SQLCODE
} else {
w !,"truncated value is: ",a
}
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).Truncate1()
truncated value is: 654.32
这两个示例都返回 654.32
(截断到小数点后两位)。
以下动态 SQL
示例指定的比例大于十进制位数:
/// d ##class(PHA.TEST.SQLFunction).Truncate2()
ClassMethod Truncate2()
{
s myquery = "SELECT {fn TRUNCATE(654.321000,9)} AS trunc"
s tStatement = ##class(%SQL.Statement).%New()
s qStatus = tStatement.%Prepare(myquery)
if qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
s rset = tStatement.%Execute()
d rset.%Display()
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).Truncate2()
trunc
654.321
1 Rows(s) Affected
它返回 654.321
( 在截断操作之前删除了尾随零;没有发生截断或零填充)。
以下动态 SQL
示例指定零比例:
/// d ##class(PHA.TEST.SQLFunction).Truncate3()
ClassMethod Truncate3()
{
s myquery = "SELECT {fn TRUNCATE(654.321888,0)} AS trunc"
s tStatement = ##class(%SQL.Statement).%New()
s qStatus = tStatement.%Prepare(myquery)
if qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
s rset = tStatement.%Execute()
d rset.%Display()
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).Truncate3()
trunc
654
1 Rows(s) Affected
它返回 654
(所有小数位和小数点都被截断)。
以下动态 SQL 示例指定负比例:
/// d ##class(PHA.TEST.SQLFunction).Truncate4()
ClassMethod Truncate4()
{
s myquery = "SELECT {fn TRUNCATE(654.321888,-2)} AS trunc"
s tStatement = ##class(%SQL.Statement).%New()
s qStatus = tStatement.%Prepare(myquery)
if qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
s rset = tStatement.%Execute()
d rset.%Display()
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).Truncate4()
trunc
600
1 Rows(s) Affected
它返回 600
(两个整数位已被截断并替换为零;请注意,未进行四舍五入)。
以下动态 SQL
示例指定与数字的整数部分一样大的负数:
/// d ##class(PHA.TEST.SQLFunction).Truncate5()
ClassMethod Truncate5()
{
s myquery = "SELECT {fn TRUNCATE(654.321888,-3)} AS trunc"
s tStatement = ##class(%SQL.Statement).%New()
s qStatus = tStatement.%Prepare(myquery)
if qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
s rset = tStatement.%Execute()
d rset.%Display()
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).Truncate5()
trunc
0
1 Rows(s) Affected
边栏推荐
- Closures in JS
- Seata分布式事务
- 数值的整数次方
- .Net 5.0 Quick Start Redis
- 为什么IDEA连接mysql Unable to resolve table 编译报错但是可以运行
- 鲁大师7月新机性能/流畅榜:性能跑分突破123万!
- Detailed explanation of network flow (what information can the flow network diagram generally reflect)
- ThinkPHP 5.1反序列化分析和poc
- Embedded system driver primary [2] - based on character device driver _ basic framework
- A powerful js pop-up alert plugin
猜你喜欢
【C语言】手撕循环结构 ——do...while语句及循环练习题(1)
数值的整数次方
Ribbon负载均衡的深度分析和使用
This binding to detailed answers
[C language] Explicit array solution (1)
RISC-V 指令格式和6种基本整数指令
线程安全问题及关键字synchronized,volatile
"Second Uncle" is popular, do you know the basic elements of "exploding" short videos from the media?
Redis全部
Redis all
随机推荐
This binding to detailed answers
使用Amazon SageMaker 构建基于自然语言处理的文本摘要应用
How to implement waterfall flow layout (what is waterfall flow layout)
PGSQL database to realize the import and export
【C语言】细品分支结构——if-else语句
鲁大师7月新机性能/流畅榜:骁龙8+正面对决天玑9000+,性能跑分突破123万!
图论之Kruskal,最小生成树如何优雅解题?
WeChat applet getPhoneNumber interface code=40013
单例模式的七种写法,你都知道吗?
智能手表前景如何?
RestTemplate 使用:设置请求头、请求体
微信小程序getPhoneNumber接口code=40013
PHP+MYSQL [Student Information Management System] (Minimalist Edition)
JS中的闭包
Intouch System Platform IDE-1
什么是 commonjs2
你知道图论的spfa吗?
图论之Prim,最小生成树该怎么解?
86.(cesium之家)cesium叠加面接收阴影效果(gltf模型)
你真的懂单例模式么