中统计字符串长度的函数_SQL Server中的字符串分割函数

您是否知道从SQL Server 2016开始,系统就内置STRING_SPLIT函数,该函数用于将字符串分隔的变量拆分为一个可用列表。 对于经常需要分割字符串的技术人员,建议您查看此功能。 STRING_SPLIT是一个表值函数,它返回由定界符分隔的字符串值的单个列。 这是T-SQL的不寻常之处,其使用要求兼容级别为130或更高(Microsoft不想引起对现有用户代码的重大更改)。 使用此方法效率更高,并且可以在不调用标量函数的情况下执行。

SQL Server系统内置分割函数

语法

STRING_SPLIT(字符串、分隔符)

如何使用它呢?

SELECT value AS 'Flavor' FROM STRING_SPLIT('Chocolate,Vanilla,Strawberry', ',');  

返回结果

511cd4992ac9af112d2bb6e36a917c72.png

执行计划是这样子的,它非常直接和简单。

0c84629786ce1bbd0019dea8e0dabdf4.png

自定义函数

这是在某些环境中可以找到的本地版本,您可以看到它的效率低得多。

****** Object:  UserDefinedFunction [dbo].[fnSplit]    Script Date: 7/11/2020 10:26:45 AM ******/  SET ANSI_NULLS ON  GO  SET QUOTED_IDENTIFIER ON  GO  ALTER FUNCTION [dbo].[fnSplit](      @sInputList VARCHAR(8000) -- List of delimited items    , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items  ) RETURNS @List TABLE (item VARCHAR(8000))  BEGIN  DECLARE @sItem VARCHAR(8000)  WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0   BEGIN   SELECT  @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),  @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))   IF LEN(@sItem) > 0    INSERT INTO @List SELECT @sItem   END  IF LEN(@sInputList) > 0   INSERT INTO @List SELECT @sInputList -- Put the last item in  RETURN  END  

结果

结果是一样的。但是请注意,您的字段名每次都是相同的,有了这个新函数,您在这方面获得了更多的灵活性。

7fcdfda8a744f9979e3c504196b3e266.png

执行计划

它比我们上面看到的包含序列的直接表达式要复杂一些。

7ecc8cc9d4ddfcd2a3dc386cd7d061e5.png

有许多不同的方法可以编写这样一个分割函数,但是既然SQL Server已经提供了一个,我强烈建议您看看它。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JBoss BPM Suite快速指南–将外部数据模型导入BPM项目

您正在从事一个大型项目&#xff0c;在企业中开发规则&#xff0c;事件和流程以满足关键业务需求。 部分要求指出&#xff0c;某个业务部门将提供您的数据模型供您利用。 不会在JBoss BPM Suite数据建模器中设计此数据模型&#xff0c;但是在从业务中心仪表板处理规则&#x…

Android项目笔记【项目管理统计图app】:使用github上的cardslib开源项目实现CardView(1)...

因为项目中用到第三级菜单&#xff0c;我们原有的界面框架已经不适用于该项目&#xff0c;Android L出了新的cardview设计&#xff0c;爬了下github发现有些高手已经把card整合为更方便调用的类库了&#xff0c;我这个项目就准备试用一下其中的一个开源项目cardslib &…

卸载 流程_一款适合于windows端的卸载神器 彻底清理残留软件

今天给大家介绍的是一款适合于Windows端的软件卸载神器---Uninstall&#xff0c;可以彻底清理残留软件。它的卸载流程是这样的&#xff0c;首先会使用软件本身的默认卸载程序进行卸载&#xff0c;卸载完成后再次扫描软件残留的一些残余文件及注册表之类的&#xff0c;可以完美的…

key value vue 输出_vue注意事项总结(一)

1.只有当vue实例被创建时data中存在的属性才是响应式的&#xff1a;如果你知道你会在晚些时候需要一个属性&#xff0c;但是一开始它为空或不存在&#xff0c;那么你仅需要设置一些初始值。2.不要在选项属性或回调上使用箭头函数&#xff1a;比如&#xff1a;created: () > …

netif_start_queue/netif_wake_queue/netif_stop_queue

在网卡驱动中&#xff0c;内核为发送数据包的流量控制提供了几个主要的函数&#xff0c;用来在驱动程序和内核之间传递流控信息。 主要有4个&#xff1a; 1】netif_start_queue 启动接口传输队列 2】netif_wake_queue 通知网络系统可以再次开始传输数据包&#xff1b;并启动接…

编写下载服务器。 第四部分:有效地实现HEAD操作

HEAD是一个经常被遗忘的HTTP方法&#xff08;动词&#xff09;&#xff0c;其行为类似于GET&#xff0c;但不会返回正文。 您使用HEAD来检查资源的存在&#xff08;如果不存在&#xff0c;它应该返回404&#xff09;&#xff0c;并确保您的缓存中没有陈旧的版本。 在这种情况下…

【grunt整合版】30分钟学会使用grunt打包前端代码

http://www.itnose.net/detail/6009394.html转载于:https://www.cnblogs.com/zifeiyu/p/4106585.html

十三水算法php_基于PHP+Redis令牌桶限流

一 、场景描述在开发接口服务器的过程中&#xff0c;为了防止客户端对于接口的滥用&#xff0c;保护服务器的资源&#xff0c; 通常来说我们会对于服务器上的各种接口进行调用次数的限制。比如对于某个 用户&#xff0c;他在一个时间段&#xff08;interval&#xff09;内&…

ECSHOP如何增加红包序列号字符

ECSHOP系统线下发放红包时系统生成的红包序列号是在10000的基础上增加四位随机数字。如果当我们要发放大额度红包的时候&#xff0c;这样的序列号规 则难免给人不安全的感觉&#xff0c;万一有无聊的人&#xff0c;蒙几个红包序列号出来&#xff0c;那就亏大了&#xff0c;因为…

Java REST JAX-RS 2.0 –如何处理日期,时间和时间戳记数据类型

无论是X-Form-Urlencoded还是JSON HTTP发布到REST资源端点&#xff0c;对于与日期或时间相关的数据都没有特定的“数据类型”。 大多数开发人员会将这些数据发布为“字符串”&#xff0c;或者只是将它们转换为Unix时间戳值&#xff08;例如1435061152&#xff09;。 但是&#…

html中给div设置的属性怎么样才能拿得到_HTML与CSS结合的三种方式:优先级比较...

所谓实践出真知&#xff0c;只有自己动手去做了&#xff0c;才能得到正确的结论。首先我们看看三种结合方式&#xff1a;通过link标签引入外部css文件通过style标签通过style属性很长一段时间我受这个一段话影响&#xff1a;在html文件中&#xff0c;代码的执行顺序是从外到内&…

Quartz作业调度框架及时间表达式的含义和语法

Quartz 是一个开源的作业调度框架&#xff0c;它完全由 Java 写成&#xff0c;并设计用于 J2SE 和 J2EE 应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。本系统结合通过 Spring 来集成 Quartz 。 Quartz 下载地址 &#x…

spring mvc mysql 实例_Spring+Mybatis+SpringMVC+Maven+MySql搭建实例

一、准备工作1. 首先创建一个表&#xff1a;CREATE TABLE t_user (USER_ID int(11) NOT NULL AUTO_INCREMENT,USER_NAME char(30) NOT NULL,USER_PASSWORD char(10) NOT NULL,USER_EMAIL char(30) NOT NULL,PRIMARY KEY (USER_ID),KEY IDX_NAME (USER_NAME)) ENGINEInnoDB AUTO…

LinkedHashMap 根据PUT顺序排序Map

最近工程里面报表需要合计 &#xff0c; 因为所有的项都是动态的&#xff0c;所以只能动态添加。 思路是使用Map&#xff0c;初始化所有Map&#xff0c;然后在Map中合计并且覆盖。 使用HashMap , 初始化后所有动态项的顺序都乱了。 Map<String , Double> totalMap new …

mysql 表设计 date_mysql 表 Date类型

举个例子给你吧&#xff0c;mysql的 datetime字段有表&#xff1a;CREATE TABLE u_user (id bigint(20) NOT NULL AUTO_INCREMENT,nickname varchar(32) DEFAULT NULL,addtime datetime DEFAULT NULL,PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;插入的话INSERT IN…

Oracle学习笔记(三)----------执行计划

查看Oracle执行计划的几种方法 一、通过PL/SQL Dev工具 1、直接File->New->Explain Plan Window&#xff0c;在窗口中执行sql可以查看计划结果。其中&#xff0c;Cost表示cpu的消耗&#xff0c;单位为n%&#xff0c;Cardinality表示执行的行数&#xff0c;等价Rows。 2、…

daocloud创建mysql_GitHub - DaoCloud/php-apache-mysql-sample

如何开发一个 PHP MySQL 的 Docker 化应用目标&#xff1a;基于典型的 LAMP 技术栈&#xff0c;用 Docker 镜像的方式搭建一个 Linux Apache MySQL PHP 的应用 。创建 PHP 应用容器因所有官方镜像均位于境外服务器&#xff0c;为了确保所有示例能正常运行&#xff0c;DaoCl…

HDU2795 Billboard

题目&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2795 1 #include<cstdio>2 #include<algorithm>3 using namespace std;4 #define lson l,m,rt<<15 #define rson m1,r,rt<<1|16 const int maxn 222222;7 int MAX[maxn << 2];8 int…

自动计算尺寸列表功能案例ios源码

源码HTKDynamicResizingCell&#xff0c;HTKDynamicResizingCell提供自动计算尺寸的TableViewCell/CollectionViewCel&#xff0c;只要设置了合适AutoLayout的约束。<ignore_js_op> 使用方法&#xff1a;使用CocoaPods添加&#xff1a; pod HTKDynamicResizingCell, ~>…

mysql存储过程返回多个值_数据库mysql存储过程之返回多个值的方法示例

本文实例讲述了mysql存储过程之返回多个值的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;mysql存储函数只返回一个值。要开发返回多个值的存储过程&#xff0c;需要使用带有INOUT或OUT参数的存储过程。咱们先来看一个orders表它的结构&#xff1a;mysql> de…