java sql拼接字符串_SQL中字符串拼接

java sql拼接字符串_SQL中字符串拼接1.概述在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例,因为这三种数据库具有代表性。sqlserver:select’123’+’456′;oracle:select’123’||’456’fromdual;或selectconcat(‘123′,’456’)fromdual;mysql:selectconcat(‘123’,’…

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

1. 概述

在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例,因为这三种数据库具有代表性。

sqlserver:

select ‘123’+’456′;

oracle:

select ‘123’||’456′ from dual;

select concat(‘123′,’456’) from dual;

mysql:

select concat(‘123′,’456’);

注意:SQL Server中没有concat函数(SQL Server 2012已新增concat函数)。oracle和mysql中虽然都有concat,但是oracle中只能拼接2个字符串,所以建议用||的方式;mysql中的concat则可以拼接多个字符串。

在SQL Server中的“+”号除了能够进行字符串拼接外,还可以进行数字运算,在进行字符串拼接时要小心使用。下面以“Users”表为例,进行详细分析:

003cc15df87786c60a5684623e2d5977.png

2. 数字 + 字符串

2.1 int + varchar

SELECT id + place FROM Users WHERE id = 1; //提示错误“在将 varchar 值 ‘bzz’ 转换成数据类型 int 时失败”

SELECT id + place FROM Users WHERE id = 5; //提示错误“在将 varchar 值 ‘102.34’ 转换成数据类型 int 时失败”

SELECT id + place FROM Users WHERE id = 4;//返回int “105”

2.2 decimal + varchar

SELECT *, id + cost FROM Users WHERE id = 4 OR id = 5;//返回decimal “102.98”和“104.30”

SELECT *, place + cost FROM Users WHERE id = 1;//提示错误“从数据类型 varchar 转换为 numeric 时出错。”

由此可见,系统会将字符串varchar类型转化为int,若不能转换则提示错误,转换成功则进行数字计算。

3. 数字 + 数字

数字指的是int、decimal等类型。数字 +  数字,则进行数字相加,若某字段为NULL,则计算结果为NULL。

SELECT *, uage + cost AS ‘uage + cost’ FROM Users

b10c74cf02035df4b24ff42199e7a949.png

4.字符串 + 字符串

字符串 + 字符串,则直接进行拼接。若某字段为NULL,则计算结果为NULL。

SELECT *, uname + place AS ‘uname + place’ FROM Users

435a468f7714b4770cf4b9d430fcf209.png

5. 使用CAST和CONVERT函数进行类型转换

通过上述实例,可以看出若要使用“+”进行字符串拼接或数字计算,最稳妥的方法是进行类型转换。

CAST()函数可以将某种数据类型的表达式转化为另一种数据类型

CONVERT()函数也可以将制定的数据类型转换为另一种数据类型

要求:将“678”转化为数值型数据,并与123相加进行数学运算。

SELECT CAST(‘678’ AS INT) + 123;

SELECT CONVERT(INT, ‘678’) + 123;

要求:id列和place列进行字符串拼接。

SELECT *, CONVERT(varchar(10), id) + place FROM Users;

字符串拼接后的字符串不能简单作为“筛选字段”

有时,需要列A = 变量1,列B = 变量2的筛选,为了简化SQL语句 列A + 列B = 变量1 + 变量2。这种方法并不完全准确

SELECT * FROM Users WHERE uname + place = ‘aabzz’;

0da7c3b30662320b36f4175aa1656e81.png

SELECT * FROM Users WHERE uname = ‘aa’ AND place = ‘bzz’;

36f70051c50249dc93c84a8ed228cd6f.png

为了防止上述情况的发生,可以再列A和列B之间加上一个较特殊的字符串。

SELECT * FROM Users WHERE uname + ‘rain@&%$man’ + place = ‘aa’ + ‘rain@&%$man’ + ‘bzz’

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[SQL中字符串拼接]http://www.zyiz.net/tech/detail-130533.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149172.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java四舍五入保留小数点后几位

    Java四舍五入保留小数点后几位(double)+Math.round返回double类型//案例:四舍五入保留小数点后1位doubled1=123.456;doubled2=654.321;doublev1=(double)Math.round(d1*10)/10;doublev2=(double)Math.round(d2*10)/10;System.out…

  • ImageView.ScaleType设置,适配列表item

    ImageView.ScaleType设置,适配列表item

  • Vue + ElementUI 后台管理系统实现顶部一级菜单栏,左侧二级菜单栏

    Vue + ElementUI 后台管理系统实现顶部一级菜单栏,左侧二级菜单栏一、要求后台管理系统页面的整体结构如图:实现顶部一级菜单和左侧二级菜单进行响应,选哪个一级菜单时,左侧菜单栏有相对应下的二级菜单,产生联动效果。然后选不同的二级菜单,主体内容区域展示对应内容。二、效果图三、具体操作实现1、用vue-cli创建的Vue项目后,自己再手动搭建项目的基本目录结构,如图:2、创建一个公共组件Whole.vue来实现整体页面结构的布局,通过div来进行区域定位和大小设定。使用el-menu组件的mode…

  • vue获取浏览器cookie_新型冠状病毒肺炎

    vue获取浏览器cookie_新型冠状病毒肺炎读取Cookie可以通过document.cookie直接读取cookie的内容:varstrCookie=document.cookie; 此时,strCookie是一个由该域名下的所有cookie的名/值对所组成的字符串,名/值对间以“分号加空格”分隔。为了方便查看,可以使用split()方法将cookie中的名/值对解析出来,得到一个cookie的列表。然后,再使用相应的解码方式,把c…

  • IGMP协议原理_IGMP协议详解

    IGMP协议原理_IGMP协议详解IGMP协议概述IGMP(InternetGroupManagementProtocol)因特网组管理协议,是TCP/IP协议簇中负责IP组播成员管理的协议。IGMP协议运行于主机与主机直接相连的组播路由器之间,主要用于维护组播成员关系。IGMP发展了三个版本:IGMPv1:定义了基本的组成员查询和报告过程。IGMPv2:添加了组成员快速离开的机制。IGMPv3:成员可以指定接收…

  • lqr算法优点(lqg控制)

    由来自INTERNAT的资料整理:LQR(linearquadraticregulator)即线性二次型调节器,其对象是现代控制理论中以状态空间形式给出的线性系统,而目标函数为对象状态和控制输入的二次型函数。LQR最优设计指设计是出的状态反馈控制器K要使二次型目标函数J取最小值,而K由权矩阵Q与R唯一决定,故此Q、R的选择尤为重要。LQR理论是现代控制理论中发展最早也最为成熟的…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号