sqlserver数据类型转换(将 nvarchar 转换为数据类型 numeric 时出现算术溢出错误)

2023-11-16

一般情况下,sqlserver会自动完成数据转换。但这种转换有时候很容易出错,尤其是nvarchar转换为numeric时。如果能够明确数据类型,最好显式转换。
举个我遇到的例子,
SELECT * FROM ITEM_INFO_TEST WHERE OBJECT_NO=’2’ AND COL530<5000.00
//COL530在数据库中类型为nvarchar(30),实际查询的时候值为40000。执行这个语句时报错:将 nvarchar 转换为数据类型 numeric 时出现算术溢出错误。
因为col530需要与5000.00进行运算,它会隐式的把col530由nvarchar向numeric转换,转换方式由5000.00来决定,且转换的长度也由它决定。本例中因为40000与5000位数不一致,会导致算术溢出错误。如果将5000.00改为50000.00,则40000与50000长度一致,隐式转换不会出问题。
这样隐式转换还存在一个问题,如果COL530为NULL,则COL530<5000.00永不会成立。查询结果必定为空。

所以在能够明确所需类型的情况下,最好使用显式转换。显示转换的方法主要有cast和convert。
CAST() 函数语法如下:
CAST ( AS [ length ])
例如CAST(COL530 AS NUMERIC(18,2)

CONVERT() 函数语法如下:
CONVERT ([ length ], [, style])
例如convert(numeric(18,2),col530)

1.data_type必须是sqlserver的基本数据类型,用户自定义类型不能转换。
2.length用于指定数据的长度,缺省值为30。

所以上面的语句改为:SELECT * FROM ITEM_INFO_TEST WHERE OBJECT_NO=’2’ AND cast(isnull(COL530,’0.00’) as numeric(18,2))<5000.00

convert功能与cast很类似,但convert更多的用于日期类型的转换。
CONVERT(data_type(length),data_to_be_converted,style)
data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。
可以使用的 style 值:
|———————|:—————:
|Style ID ——|:Style 格式
100 或者 0 ——|: mon dd yyyy hh:miAM (或者 PM)
101 ——|: mm/dd/yy
102 ——|: yy.mm.dd
103 ——|: dd/mm/yy
104 ——|:dd.mm.yy
105 ——|:dd-mm-yy
106 ——|: dd mon yy
107 ——|: Mon dd, yy
108 ——|: hh:mm:ss
109 或者 9 ——|: mon dd yyyy hh:mi:ss:mmmAM(或者 PM)
110 ——|: mm-dd-yy
111 ——|: yy/mm/dd
112 ——|: yymmdd
113 或者 13 ——|: dd mon yyyy hh:mm:ss:mmm(24h)
114 ——|: hh:mi:ss:mmm(24h)
120 或者 20 ——|: yyyy-mm-dd hh:mi:ss(24h)
121 或者 21 ——|: yyyy-mm-dd hh:mi:ss.mmm(24h)
126 ——|: yyyy-mm-ddThh:mm:ss.mmm(没有空格)
130——|: dd mon yyyy hh:mi:ss:mmmAM
131 ——|: dd/mm/yy hh:mi:ss:mmmAM

例如:
CONVERT(VARCHAR(19),GETDATE())
CONVERT(VARCHAR(10),GETDATE(),110)
CONVERT(VARCHAR(11),GETDATE(),106)
CONVERT(VARCHAR(24),GETDATE(),113)
CONVERT(VARCHAR(30),GETDATE(),20)

结果为
Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635
2015-08-06 14:00:10

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqlserver数据类型转换(将 nvarchar 转换为数据类型 numeric 时出现算术溢出错误) 的相关文章

  • 恐造成下一个“千年虫”的闰秒,遭科技巨头们联合抵制

    整理 彭慧中 责编 屠敏 出品 CSDN ID CSDNnews 近日 谷歌 Meta 微软和亚马逊四位科技巨头呼吁将闰秒取消 并称闰秒会对网络造成巨大影响 闰秒或将成为下一个类似 千年虫 bug的罪魁祸首 原来 除了闰年与闰月外 还有闰秒
  • Alibaba限流组件——Sentinel核心概念与流量控制

    目录 1 Sentinel介绍 1 1 Sentinel是什么 1 2 组成 1 3 关键概念 2 Sentinel流量控制案例 2 1 引入依赖 2 2 使用Sentinel提供的API实现流量控制 2 2 1 写一个有返回值的接口 2
  • MyBatis 工具学习笔记(基础)

    What s this 是一款优秀的持久层框架 用于简化 JDBC 开发 是 Apache 的一个开源项目 Java EE 三层架构 表现层 业务层 持久层 存储层 持久层 负责将数据保存到数据库的那一层代码 ORM Object Rela
  • Lumen开发:Lumen的异常处理机制

    版权声明 本文为博主原创文章 未经博主允许不得转载 Lumen的核心类Application引用了专门用于异常处理的RegistersExceptionHandlers class Application extends Container
  • 内存段分配方案

    复杂度3 5 机密度3 5 最后更新2021 04 21 每个进程都有自己的有效地址空间 这个地址空间有些段已经预先被分配或占用 共享 有些等待进程自己进行分配 对进程来说 有2个参数4种组合 32位或64位程序 内核态进程或者用户态进程
  • Spring Boot 静态资源处理(六)

    目录 1 Servlet 方式相同 2 Spring MVC 方式 2 1 为静态资源添加版本号 2 1 1 指定版本号 2 1 2 使用 MD5 作为版本号 2 2 gzip 压缩 3 3 chain cache 2 4 省略 webja
  • 【VUE - 工具 - TIFF】01、前端vue+tiffjs预览显示在线tiff图片

    前言 需求 通过其他工具前置切出来 并放在服务器目录下的tiff图片 项目需要在前端预览显示 实现方式 基于vue tiffjs实现 实现 1 实现效果 npm VUE实现 1 安装依赖 npm i tiff js S yarn add t
  • 计算机在多媒体技术中的应用,06多媒体技术在计算机试题中的应用.doc

    06多媒体技术在计算机试题中的应用 第1题 下列关于多媒体技术主要特征的描述 正确的是 A 多媒体信息必须是数字信息 B 计算机主要处理模拟信息 C 模拟数据是多媒体技术的核心 D Flash动画是模拟化数据 答案 A 第2题 存储一张20
  • http协议面试

    1 说一下什么是Http协议 对器客户端和 服务器端之间数据传输的格式规范 格式简称为 超文本传输协议 2 什么是Http协议无状态协议 怎么解决Http协议无状态协议 曾经去某创业公司问到 无状态协议对于事务处理没有记忆能力 缺少状态意味
  • CUDA详解-GPU架构

    每个线程有自己的私有本地内存 Local Memory 而每个线程块有包含共享内存 Shared Memory 可以被线程块中所有线程共享 其生命周期与线程块一致 此外 所有的线程都可以访问全局内存 Global Memory 还可以访问一
  • html图片加载太慢如何解决办法,如何解决CSS JS和图片对网站加载速度的影响

    对于网站加载速度的严格要求一致是seo优化过程中的重点 如何提升网站加载速度 服务器 网站内容元素等都有很大的关系 本篇文章将从CSS JS和图片三个方面进行详细的讲解 1 图片 1 指定图像尺寸 加载图像之前 您的浏览器开始渲染页面 制定
  • Remote Sensing 从投稿到录用

    一 刊物介绍 最新升级版大类分区仍然是二区TOP期刊 这个期刊现在业界褒贬不一 今年影响因子已经上升到4 848 可以作为一区文章被拒之后的首选 研究方向 无线传感器网络的定位与导航 投稿 Remote Sensing Remote Sen
  • RabbitMQ C++客户端 RabbitMQ Client for Windows/Linux 超简单接收发送接口-最近更新2019-09-06

    消息队列设计精要 解耦是消息队列要解决的最本质问题 所谓解耦 简单点讲就是一个事务 只关心核心的流程 而需要依赖其他系统但不那么重要的事情 有通知即可 无需等待结果 如果下游有很多系统关心你的系统发出的通知的时候 果断地使用消息队列吧 掰开
  • Docker 镜像使用

    目录 1 列出镜像列表 2 获取一个新的镜像 3 查找镜像 4 拖取镜像 5 删除镜像 6 创建镜像 a 更新镜像 b 构建镜像 设置镜像标签 当运行容器时 使用的镜像如果在本地中不存在 docker 就会自动从 docker 镜像仓库中下

随机推荐