数据库中字符串相加需要换行

数据库中字符串相加需要换行,这个需求在现在项目中很常见,特别是备注内容的追加,因此把Oracle/SQLServer/MySQL这几种数据库的使用进行简单的总结一下

1、本文内容

  • Oracle中实现字符串相加需要换行
  • SQLServer中实现字符串相加需要换行
  • MySQL中实现字符串相加需要换行

2、Oracle中实现字符串相加且换行

在 Oracle 数据库中,当你想要将多个字符串相加并希望它们之间包含换行符时,你可以使用字符串连接操作符 || 并结合 Oracle 的字符转义序列或者 CHR 函数来实现换行。

Oracle 中没有直接的转义序列来表示换行,但你可以使用 CHR(10) 来表示换行符(在 ASCII 中,换行符的编码是 10)。

2.1、示例使用 CHR(10)和符串连接操作符 ||

使用字符串连接操作符 || 和 换行符 CHR(10)

SYS@orcl>col msg_string format a40
SYS@orcl>SELECT 'First line     第一行' || CHR(10) || 'Second line      第二行' AS msg_string FROM dual;

MSG_STRING
----------------------------------------
First line      第一行
Second line     第二行

2.2、示例使用 CHR(10)和 CONCAT函数

2.2.1、Oracle中的CONCAT函数

Oracle中的CONCAT函数主要用于连接两个或多个字符串。以下是对Oracle CONCAT函数的详细解释:

  1. 函数定义:

    • CONCAT函数是Oracle数据库中用于连接两个字符串的内置函数。
    • 它接受两个字符串参数,并返回一个新的字符串,该字符串是这两个参数值的连接结果。
  2. 语法格式:

    • CONCAT(string1, string2)
      • string1:第一个要连接的字符串。
      • string2:第二个要连接的字符串。
  3. 返回值:

    • CONCAT函数返回string1连接string2后的一个字符串值。
  4. 特点:

    • CONCAT函数不会改变现存的字符串,而是返回连接后的新字符串。
    • 如果任一参数为NULL,则CONCAT函数将其视为空字符串,并继续执行连接操作。
    • 在Oracle中,CONCAT函数只能直接连接两个字符串。如果需要连接多个字符串,可以嵌套使用CONCAT函数。
SYS@orcl>SELECT CONCAT(CONCAT('First line       第一行',CHR(10)),'Second line     第二行') AS msg_string FROM dual;

MSG_STRING
----------------------------------------
First line      第一行
Second line     第二行

2.3、在 PL/SQL 中:

编写 PL/SQL 代码(例如存储过程、函数或匿名块),可以使用相同的方法来构建包含换行的字符串。

set serveroutput on

DECLARE  
    v_string VARCHAR2(100);  
BEGIN  
    v_string := 'First line     第一行' || CHR(10) || 'Second line      第二行';  
    DBMS_OUTPUT.PUT_LINE(v_string);  
END;  
/

在这里插入图片描述

3、SQLServer中实现字符串相加且换行

SQL Server 中,如果你想要将多个字符串相加并在它们之间包含换行符,你可以使用字符串连接操作符 + 或者 CONCAT函数,并结合换行符的字符表示。在 SQL Server 中,换行符通常使用 CHAR(13) + CHAR(10) 来表示,其中 CHAR(13) 是回车符(Carriage Return, CR),而 CHAR(10) 是换行符(Line Feed, LF)。在 Windows 环境中,这两者通常一起使用以表示一个换行。

注意连接操作符 + 或者 CONCAT函数区别

  • 使用 + 操作符时不同,因为 + 操作符在连接字符串时,如果任何一侧为 NULL,则结果也为 NULL。

  • CONCAT 函数在处理 NULL 值时特别有用,因为它会自动忽略任何 NULL 值,并返回其他非 NULL 字符串的连接结果

示例不在此展开

3.1、字符串连接操作符 + 并结合换行符

操作符+ CHAR(13) + CHAR(10)

SELECT N'First line      第一行' + CHAR(10) + CHAR(10) + N'Second line     第二行' AS msg_string ;
msg_string
----------------------------------------
First line      第一行

Second line     第二行

(1 行受影响)

操作符 + CHAR(10)

SELECT N'First line      第一行' + CHAR(10) + N'Second line     第二行' AS msg_string ;

msg_string
---------------------------------------
First line      第一行
Second line     第二行

(1 行受影响)

3.2、CONCAT函数实现并结合换行符

如何在 SQL Server 中将两个字符串通过换行符连接起来并实现换行

SELECT CONCAT(N'First line      第一行',CHAR(13),CHAR(10),N'Second line     第二行') AS msg_string ;

msg_string
----------------------------------------
First line      第一行
Second line     第二行

但是,在许多情况下,仅使用 CHAR(10) 就足够了,因为大多数客户端工具(如 SQL Server Management Studio, SSMS)和应用程序都能够识别单独的换行符作为新行的开始。所以你也可以这样写:

SELECT CONCAT(N'First line      第一行',CHAR(10),N'Second line     第二行') AS msg_string ;

msg_string
---------------------------------------
First line      第一行
Second line     第二行

(1 行受影响)

如果你在 SQL Server 存储过程或函数中操作这些字符串,并且稍后可能在支持换行的文本编辑器或应用程序中查看它们,那么使用 CHAR(13) + CHAR(10) 或仅 CHAR(10) 通常都可以满足需求。但是,如果你正在将字符串输出到某些特定的系统或格式(如某些旧的文本文件或终端),那么你可能需要确保使用正确的换行符组合。

4、MySQL中实现字符串相加且换行

MySQL 中,当你想将多个字符串相加并在它们之间包含换行符时,你可以使用字符串连接操作符 CONCAT() 或简单地使用 ||(在某些 MySQL 方言中,如 MariaDB,但标准 MySQL 使用 CONCAT())。换行符在 ASCII 中由字符 \n 表示(十进制的 10),但在 MySQL 字符串中,你需要使用 CHAR(10) 或 \n(如果 MySQL 配置支持它)。

4.1、使用 CONCAT() 和 CHAR(10)

mysql> SELECT CONCAT(CONCAT('First line       第一行',CHAR(10)),'Second line     第二行') AS msg_string FROM dual;
+------------------------------------------------------+
| msg_string                                           |
+------------------------------------------------------+
| First line       第一行
Second line     第二行       |
+------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CONCAT(CONCAT('First line       第一行',CHAR(10)),'Second line     第二行') AS msg_string FROM dual \G;
*************************** 1. row ***************************
msg_string: First line       第一行
Second line     第二行
1 row in set (0.00 sec)

ERROR:
No query specified

4.2、MySQL 分支(如 MariaDB)中使用 || 和 \n:

注意:标准的 MySQL 不支持 || 作为字符串连接操作符,但 MariaDB 和其他一些变种支持

mysql> select '每箱重量不超过10kg.' ||  '第二行' as combined_string FROM dual;
+-----------------+
| combined_string |
+-----------------+
|               0 |
+-----------------+
1 row in set, 2 warnings (0.00 sec)
-- 可以看到,标准的 MySQL 查询结果为0

4.3、在最新发布的MySQL8.0.x和MySQL8.4执行

在这里插入图片描述
结果并非是预想值,和MySQL5.7.x执行的结果完全不一样。具体原因参考官方文档
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_char

(root@localhost)[db01]> SELECT CHAR(10);
+--------------------+
| CHAR(10)           |
+--------------------+
| 0x0A               |
+--------------------+
1 row in set (0.00 sec)

官方文档有这样一段内容及示例
By default, CHAR() returns a binary string. To produce a string in a given character set, use the optional USING clause:

mysql> SELECT CHAR(77,121,83,81,'76' USING utf8mb4);
+---------------------------------------+
| CHAR(77,121,83,81,'76' USING utf8mb4) |
+---------------------------------------+
| MySQL                                 |
+---------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CHAR(77,77.3,'77.3' USING utf8mb4);
+------------------------------------+
| CHAR(77,77.3,'77.3' USING utf8mb4) |
+------------------------------------+
| MMM                                |
+------------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+---------+------+-------------------------------------------+
| Level   | Code | Message                                   |
+---------+------+-------------------------------------------+
| Warning | 1292 | Truncated incorrect INTEGER value: '77.3' |
+---------+------+-------------------------------------------+
1 row in set (0.00 sec)

基于以上内容,正确SQL应该如下

(root@localhost)[db01]> SELECT CONCAT('First line       第一行',CHAR(10 USING utf8mb4),'Second line     第二行') AS msg_string FROM dual \G;
*************************** 1. row ***************************
msg_string: First line       第一行
Second line     第二行
1 row in set (0.00 sec)

ERROR:
No query specified

(root@localhost)[db01]> SELECT CONCAT('First line       第一行',CHAR(10 USING utf8mb4),'Second line     第二行') AS msg_string FROM dual;
+------------------------------------------------------+
| msg_string                                           |
+------------------------------------------------------+
| First line       第一行
Second line     第二行       |
+------------------------------------------------------+
1 row in set (0.00 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/653126.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用BigDecimal定义的实体类字段返回给前台的是字符串类型,如何返回数字类型

目录 前言: 问题现象: 解决方法: 效果: 前言: 做项目的时候数据字段通常定义为bigdecimal类型,方便进行运算,但是发现接口调用后返回给前台的是字符串,这篇博文讲的是如何将定义…

下半年开考,仅考1次,系统集成项目管理工程师考试安排!

《系统集成项目管理工程师教程》第3版官方教材将在下半年开始使用,相对于之前的版本,变化很大。新老考生都需要重新学习。历年真题显示,官方教材非常重要,考试题目大部分都可以在教材中找到原文。因此,对于下半年的考试…

1109 擅长C(测试点0,1,2,3)

当你被面试官要求用 C 写一个“Hello World”时,有本事像下图显示的那样写一个出来吗? ..C.. .C.C. C...C CCCCC C...C C...C C...C CCCC. C...C C...C CCCC. C...C C...C CCCC. .CCC. C...C C.... C.... C.... C...C .CCC. CCCC. C...C C...C C...C C…

【C语言】深入理解指针(一)(中)

2、指针变量和解引用操作符(*) (1)指针变量 我们通过取地址操作符(&)拿到的地址是一个数值,比如:0x006FFD70,这个数值有时候是需要存储起来,方便后期再…

基于tcp实现自定义应用层协议

认识协议 协议(Protocol) 是一种通信规则或标准,用于定义通信双方或多方之间如何交互和传输数据。在计算机网络和通信系统中,协议规定了通信实体之间信息交换的格式、顺序、定时以及有关同步等事宜的约定。简易来说协议就是通信…

分库分表最全详解(图文全面总结)

分库分表 分库分表是数据库设计、和管理中的一种策略,主要解决随着数据量、和并发访问量的增加而带来的性能、和扩展性问题。 分库分表,主要就是两种常用手段:“分库”、和“分表”。 如下图所示: 分库(Database S…

牛客NC67 汉诺塔问题【中等 递归 Java/Go/PHP/C++】 lintcode 169 · 汉诺塔

题目 题目链接: https://www.nowcoder.com/practice/7d6cab7d435048c4b05251bf44e9f185 https://www.lintcode.com/problem/169/ 思路 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C…

discuzX2.5的使用心得 札记一

从开始接受php论坛的开发任务,对php感兴趣的我开始迷恋上discuz这个产品了, 像戴志康这样的创新人才,是我们这代人的骄傲和学习的榜样 应该是了解一下,啥事discuzX2.5,百度看一下 discuz x2.5_百度百科 看完百度词条…

国密协议网关与IPSec VPN技术:保障数据安全传输的新途径

国密协议网关IPSec VPN隧道技术是一种结合了国家密码管理局(简称国密)的加密算法和IPSec VPN隧道技术的安全通信解决方案。 IPSec(Internet Protocol Security)是互联网协议安全的一种标准,用于保护网络通信的安全性和…

linux系统常用压缩和解压命令

文章目录 Ubuntu 系统中的文件压缩与解压指南一、常用的压缩和解压工具二、tar 工具三、gzip 工具四、bzip2 工具五、zip 和 unzip 工具六、7z 工具乱码批量解压脚本七、总结 Ubuntu 系统中的文件压缩与解压指南 在 Ubuntu 系统中,文件压缩与解压是日常操作中非常常…

vue脚手架与创建vue项目

一、前言 vue脚手架的安装与创建vue项目需要先行安装配置node与npm,详情可以看node、npm的下载、安装、配置_node 下载安装-CSDN博客 二、vue脚手架的使用 1、vue与vue脚手架的版本 Vue脚手架(Vue CLI)是Vue.js官方提供的一个命令行工具&…

四大策略,五大优势!麒麟信安云助力用户实现VMware替换无忧

2023 年 12 ⽉ 11 ⽇,VMware 正式官宣“所有 VMware by Broadcom 解决⽅案向订阅许可证的过渡,并停⽌销售永久许可证、永久产品的⽀持和订阅(SnS)续订以及混合购买计划/订阅购买计划积分(HPP/SPP)”。 202…

2024年电子、电气与信息科学国际会议(EEIS 2024)

2024年电子、电气与信息科学国际会议(EEIS 2024) 2024 International Conference on Electronics, Electrical and Information Science 【重要信息】 大会地点:昆明 大会官网:http://www.iceeis.com 投稿邮箱:iceeis…

vue数字翻盘,翻转效果

实现数字翻转的效果上面为出来的样子 下面为代码&#xff0c;使用的时候直接引入&#xff0c;还有就是把图片的路径自己换成自己或者先用颜色替代&#xff0c;传入num和numlength即可 <template><div v-for"(item, index) in processedNums" :key"in…

mysql-索引、存储引擎、事务、锁机制和优化

1. MySQL的索引 1.1 概述 索引是通过某种算法&#xff0c;构建出一个数据模型&#xff0c;用于快速找出在某个列中有以特定值的行&#xff0c;不使用索引&#xff0c;MySQL必须从一条记录开始读完整个表&#xff0c;直到找出相关的行&#xff0c;表越大查询数据所花的时间越多…

vue3 使用vant

使用前提&#xff1a; vite创建的vue3项目 vanthttps://vant-ui.github.io/vant/#/zh-CN/home npm i vant 引入样式&#xff1a; main.js import vant/lib/index.css vant封装 import { showLoadingToast,closeToast,showDialog,showConfirmDialog } from vant;export func…

OWASP top10--SQL注入(三、手工注入)

目录 access数据库 手工注入过程&#xff1a; 猜解数据库表名 猜解数据库表名里面的字段 猜解字段内容 SQL注入中的高级查询 mssql数据库 手工注入过程&#xff1a; sa权限 ​编辑dbowner权限 public权限 mysql数据库 1、对服务器文件进行读写操作(前提条件) 需要知…

安全阀检测要求标准:如何提高检测效率与准确性?

安全阀&#xff0c;作为承压设备的重要保护元件&#xff0c;其性能的稳定性和可靠性直接关系到设备的运行安全。 因此&#xff0c;对安全阀进行定期、规范的检测显得尤为重要。接下来&#xff0c;佰德将围绕安全阀的检测要求标准&#xff0c;从检测前准备工作到检测报告与记录…

第十二周 5.21面向对象的三大特性(封装、继承、多态)(二)

三、多态 1.理解: (1)多态:父类型的引用存储不同子类型的对象 父类类名 引用名 new 子类类名(); 引用 对象 父类型 子类型 …

创新融合,5G+工业操作系统引领未来工厂

为加速企业完成生产制造自动化和经营管理自动化&#xff0c;从而走向未来工厂&#xff0c;蓝卓不断探索supOS工业操作系统与前沿技术的的创新融合&#xff0c;而5G技术为工业操作系统提供了更多元化的赋能手段和想象空间。目前&#xff0c;supOS围绕生产、安全、质检、监控等领…